[問題] loop迴圈數不固定

看板C_and_CPP作者 (小草)時間11年前 (2014/05/21 15:52), 編輯推噓2(2017)
留言19則, 9人參與, 最新討論串1/1
開發平台(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

05/21 16:30, , 1F
用遞迴函數
05/21 16:30, 1F

05/21 18:41, , 2F
動態宣告= =?
05/21 18:41, 2F

05/21 19:14, , 3F
同1F,遞迴可以很優雅的解決你的問題。
05/21 19:14, 3F

05/21 22:01, , 4F
你的for也太嚇人了
05/21 22:01, 4F

05/21 22:33, , 5F
因為浮點數的相比嗎?還是其它呢?
05/21 22:33, 5F

05/21 22:36, , 6F
謝謝前幾樓的答案 :)
05/21 22:36, 6F

05/22 00:55, , 7F
你的例子除了用 recursive 去做外,也可以開陣列,
05/22 00:55, 7F

05/22 00:55, , 8F
應會蠻直覺的。
05/22 00:55, 8F

05/22 01:15, , 9F
抱歉,想了下,用陣列還是要用遞回較方便 Orz
05/22 01:15, 9F

05/22 06:01, , 10F
sizeof(array) / type 不行嗎??
05/22 06:01, 10F

05/22 11:38, , 11F
總共有 96,560,646 種可能的組合耶 :)
05/22 11:38, 11F

05/22 14:40, , 12F
更正,總共有C(104,4) = 4.598,126 種可能的組合 :)
05/22 14:40, 12F

05/22 23:25, , 13F
令I=10*i J=10*j K=10*k L=10*l M=10*m N=10*num,
05/22 23:25, 13F

05/22 23:27, , 14F
再解 I+J+K+L+M=N 較可行 (可用next_permutation())
05/22 23:27, 14F

05/23 01:40, , 15F
如果他的元素高達上千個,recursive會爆掉阿
05/23 01:40, 15F

05/23 07:43, , 16F
next_permutation() 最漂亮的地方就是它的演算法是
05/23 07:43, 16F

05/23 07:44, , 17F
非遞迴式的,即使求上千個元素的總和也不會爆 :)
05/23 07:44, 17F

05/23 18:42, , 18F
用next_permutation()寫出來了 > < 太感謝big大
05/23 18:42, 18F

05/25 14:41, , 19F
上千個recursive不會爆吧...
05/25 14:41, 19F
文章代碼(AID): #1JV5iqSq (C_and_CPP)