[问题] loop循环数不固定

楼主: parkko (薄荷)   2014-05-21 15:52:18
开发平台(Platform): codeblocks(Ex: VC++, GCC, Linux, ...)
问题(Question):
大家好
我的程式有个部份
会碰到需要让一个
长度不固定的阵列(要根据某个档案读入比数决定)
需要用loop去跑每个值的可能性
让整个阵列加总的值等于特定值
问题就在于
当这个阵列长度是固定时
我可以各写一个for/while循环来跑
但是 当他不固定时
不小得有没有办法用while循环或是什么技巧做到这件事呢?
谢谢
程式码(Code):(请善用置底文网页, 记得排版)
举个例而言
如下面的code所示
当我的阵列长度为5时 double a[5];
我可以用下面的5圈for loop去跑
那阵列的值就是 a[0]=i, a[1]=j, a[2]=k, a[3]=l, a[4]=m ;//下面只是单纯印出
但是因为阵列长度是要执行code的当下
才会知道
所以不晓得
有什么办法可以让for loop的次数 是动态的?
谢谢 > <
double num=10.0;
for(double i=0.0;i<num;i+=0.1){
for(double j=0.0;j<num;j+=0.1){
if(i+j>num)
break;
for(double k=0.0;k<num;k+=0.1){
if(i+j+k>num)
break;
for(double l=0.0;l<num;l+=0.1){
if(i+j+k+l>num)
break;
for(double m=0.0;m<num;m+=0.1){
if(i+j+k+l+m>num)
break;
else{
if(i+j+k+l+m==num){
cout<<i<<" "<<j<<" "<<k<<" "<<l<<" "<<m<<endl;
}
}
}
}
}
}
}
补充说明(Supplement):
作者: prismwu   2014-05-21 16:30:00
用递回函数
作者: GoalBased (Artificail Intelligence)   2014-05-21 18:41:00
动态宣告= =?
作者: remizu (remizu)   2014-05-21 19:14:00
同1F,递回可以很优雅的解决你的问题。
作者: diabloevagto (wi)   2014-05-21 22:01:00
你的for也太吓人了
楼主: parkko (薄荷)   2014-05-21 22:33:00
因为浮点数的相比吗?还是其它呢?谢谢前几楼的答案 :)
作者: EdisonX (卡卡兽)   2014-05-22 00:55:00
你的例子除了用 recursive 去做外,也可以开阵列,应会蛮直觉的。抱歉,想了下,用阵列还是要用递回较方便 Orz
作者: xpride (陈ㄚ智)   2014-05-22 06:01:00
sizeof(array) / type 不行吗??
作者: bigpigbigpig (To littlepig with love)   2014-05-22 11:38:00
总共有 96,560,646 种可能的组合耶 :)更正,总共有C(104,4) = 4.598,126 种可能的组合 :)令I=10*i J=10*j K=10*k L=10*l M=10*m N=10*num,再解 I+J+K+L+M=N 较可行 (可用next_permutation())
作者: xpride (陈ㄚ智)   2014-05-23 01:40:00
如果他的元素高达上千个,recursive会爆掉阿
作者: bigpigbigpig (To littlepig with love)   2014-05-23 07:43:00
next_permutation() 最漂亮的地方就是它的算法是非递回式的,即使求上千个元素的总和也不会爆 :)
楼主: parkko (薄荷)   2014-05-23 18:42:00
用next_permutation()写出来了 > < 太感谢big大
作者: suhorng ( )   2014-05-25 14:41:00
上千个recursive不会爆吧...

Links booklink

Contact Us: admin [ a t ] ucptt.com