[问题] 所有组合

楼主: 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