[問題] 所有組合

作者: PPTHS (魯蛇王)   2014-08-02 15:26:13
開發平台(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
作者: x000032001 (版廢了該走了)   2014-08-02 15:43:00
大概是這樣吧 http://ideone.com/mOOQbF
作者: PPTHS (魯蛇王)   2014-08-02 16:02:00
謝謝大大 不過你寫得好像是排列 跟本魯需求不同QQhttp://www.eyny.com/thread-6319000-1-1.html大大寫的應該是上面這種問題~
作者: x000032001 (版廢了該走了)   2014-08-02 16:12:00
看錯了..那chk拿掉就是你要的了吧
作者: lNishan (紫小霓)   2014-08-02 19:28:00
Backtracking就是你需要的。可看看recursive enumeration反正都是一個function在call自己這樣啦XD 初次寫可能稍難
作者: PPTHS (魯蛇王)   2014-08-02 19:34:00
謝謝各位大大熱心解惑!
作者: Killercat (殺人貓™)   2014-08-04 08:23:00
你要做的是nCr/nPr? 我建議你搜尋一下這關鍵字雖然都是硬算 不過至少寫的匯票亮點
作者: bigpigbigpig (To littlepig with love)   2014-08-04 15:45:00
可 Google Cartesian product C++ :)
作者: EdisonX (卡卡獸)   2014-08-04 19:07:00
你的特例可看作是 3 進制的大數遞增,應該簡單很多...

Links booklink

Contact Us: admin [ a t ] ucptt.com