[問題] 所有組合

看板C_and_CPP作者 (我射故我在)時間11年前 (2014/08/02 15:26), 編輯推噓3(309)
留言12則, 6人參與, 最新討論串1/1
開發平台(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

08/02 15:43, , 1F
大概是這樣吧 http://ideone.com/mOOQbF
08/02 15:43, 1F

08/02 16:02, , 2F
謝謝大大 不過你寫得好像是排列 跟本魯需求不同QQ
08/02 16:02, 2F

08/02 16:02, , 3F

08/02 16:03, , 4F
大大寫的應該是上面這種問題~
08/02 16:03, 4F

08/02 16:12, , 5F
看錯了..那chk拿掉就是你要的了吧
08/02 16:12, 5F

08/02 19:28, , 6F
Backtracking就是你需要的。可看看recursive enumeration
08/02 19:28, 6F

08/02 19:29, , 7F
反正都是一個function在call自己這樣啦XD 初次寫可能稍難
08/02 19:29, 7F

08/02 19:34, , 8F
謝謝各位大大熱心解惑!
08/02 19:34, 8F

08/04 08:23, , 9F
你要做的是nCr/nPr? 我建議你搜尋一下這關鍵字
08/04 08:23, 9F

08/04 08:23, , 10F
雖然都是硬算 不過至少寫的匯票亮點
08/04 08:23, 10F

08/04 15:45, , 11F
可 Google Cartesian product C++ :)
08/04 15:45, 11F

08/04 19:07, , 12F
你的特例可看作是 3 進制的大數遞增,應該簡單很多...
08/04 19:07, 12F
文章代碼(AID): #1Jt9ANkD (C_and_CPP)