[問題] 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