看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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