作者parkko (小草)
看板C_and_CPP
標題[問題] loop迴圈數不固定
時間Wed May 21 15:52:18 2014
開發平台(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):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.217.60
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1400658740.A.734.html
→ prismwu:用遞迴函數 05/21 16:30
推 GoalBased:動態宣告= =? 05/21 18:41
→ remizu:同1F,遞迴可以很優雅的解決你的問題。 05/21 19:14
→ diabloevagto:你的for也太嚇人了 05/21 22:01
→ parkko:因為浮點數的相比嗎?還是其它呢? 05/21 22:33
→ parkko:謝謝前幾樓的答案 :) 05/21 22:36
推 EdisonX:你的例子除了用 recursive 去做外,也可以開陣列, 05/22 00:55
→ EdisonX:應會蠻直覺的。 05/22 00:55
→ EdisonX:抱歉,想了下,用陣列還是要用遞回較方便 Orz 05/22 01:15
→ xpride:sizeof(array) / type 不行嗎?? 05/22 06:01
→ bigpigbigpig:總共有 96,560,646 種可能的組合耶 :) 05/22 11:38
→ bigpigbigpig:更正,總共有C(104,4) = 4.598,126 種可能的組合 :) 05/22 14:40
→ bigpigbigpig:令I=10*i J=10*j K=10*k L=10*l M=10*m N=10*num, 05/22 23:25
→ bigpigbigpig:再解 I+J+K+L+M=N 較可行 (可用next_permutation()) 05/22 23:27
→ xpride:如果他的元素高達上千個,recursive會爆掉阿 05/23 01:40
→ bigpigbigpig:next_permutation() 最漂亮的地方就是它的演算法是 05/23 07:43
→ bigpigbigpig:非遞迴式的,即使求上千個元素的總和也不會爆 :) 05/23 07:44
→ parkko:用next_permutation()寫出來了 > < 太感謝big大 05/23 18:42
→ suhorng:上千個recursive不會爆吧... 05/25 14:41