看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C 問題:3個顏色不同的球,放入3個不同盒子(盒子可重複放入),求所有組合? 以下為本魯的程式碼 #include<stdio.h> #include<stdlib.h> main(){ for(int i=1;i<=3;i++){ for(int j=1;j<=3;j++){ for(int k=1;k<=3;k++){ printf("i=%d j=%d k=%d\n",i,j,k); } } } system("pause"); } 本魯想問的是 雖然我的程式碼可以得到我想知道的答案 但如果當球的數量變多(EX:20顆顏色不同的球) 不會就要傻傻的寫20個for吧 時間複雜度感覺也很不優 搜尋板上先前的文章 有提到 Backtracking 演算法 跟 排列遞回寫法 可是感覺又跟我的問題不太像 所以 想請問各位先進 有沒有什麼比較好的寫法 可以解決相關的問題? 提供個思考方向給本魯就好 本魯會自己實作的 先謝謝各位大大了! 第一次發文 有違反板規 請告知 thx -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.133.90.92 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1406964375.A.B8D.html
x000032001:大概是這樣吧 http://ideone.com/mOOQbF 08/02 15:43
PPTHS:謝謝大大 不過你寫得好像是排列 跟本魯需求不同QQ 08/02 16:02
PPTHS:大大寫的應該是上面這種問題~ 08/02 16:03
x000032001:看錯了..那chk拿掉就是你要的了吧 08/02 16:12
lNishan:Backtracking就是你需要的。可看看recursive enumeration 08/02 19:28
lNishan:反正都是一個function在call自己這樣啦XD 初次寫可能稍難 08/02 19:29
PPTHS:謝謝各位大大熱心解惑! 08/02 19:34
Killercat:你要做的是nCr/nPr? 我建議你搜尋一下這關鍵字 08/04 08:23
Killercat:雖然都是硬算 不過至少寫的匯票亮點 08/04 08:23
bigpigbigpig:可 Google Cartesian product C++ :) 08/04 15:45
EdisonX:你的特例可看作是 3 進制的大數遞增,應該簡單很多... 08/04 19:07