作者PPTHS (我射故我在)
看板C_and_CPP
標題[問題] 所有組合
時間Sat Aug 2 15:26:13 2014
開發平台(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
→ 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