排列组合问题,我弄了一中午,实在算不出... 有23种不同重量的球,每种球有不同的数量,分别是2,5,7,5,7,12,8,5,7,3,12,5,5,7,6,9,11,8,9,9,11,13,13,从23种球中任选5种球,顺序不限,一共有多少种选法?我只搞出每种球没有数量限制的组合...热心的朋友帮忙搞下,先谢谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 黑加白,怎么乘啊,我也想X啊,怎么X啊,我都X废了... int arr[] = {2,5,7,5,7,12,8,5,7,3,12,5,5,7,6,9,11,8,9,9,11,13,13};int count = 5;int find(int arr[], int count) { if (count == 0) { //找到 } else { for ( int i = 0; i <= arr[0]; i++) { if (count - i >= 0) find(arr+1, count - i) else break; } } } 楼上了,连return都没有,你怎么递归的? 哥们死机了...count不动啊...无限了...arr越界.... 题目有点不大理解,选5种球,每种球选几个不定是吧?我的思路是:对23种球循环第一棵树有22棵子树,第二棵树有21棵子树,这样的话就建19棵树,并且最后一棵树只有一棵子树。选择结点的时候按照那23种球的编号顺序来(所有的比自己编号小的都是自己的后代),能够保证不会重复,删除深度不够5的。对每一条路径又有x1*x2*x3*x4*x5种组合x1为该路径中第一个结点所代表球类的个数。方法挺笨的,也不知道对不对。 2楼已经把答案说了...在你得到的每个组合里面把这组合里面的个数量的球.相乘.然后就加上下一个组合的各球的数量乘.... {a,b,c,d,e,f,g,h,...} {2,5,7,5,7,12,8,5,7,3,12,5,5,7,6,9,11,8,9,9,11,13,13}; 组合{a,b,c,d,e}=2*5*7*5*7+组合{a,b,c,d,f}=2*5*7*5*12+... 这已经是5种不同的了.相同重量的球不能在一起..了你所说的取5个.其实是从2+5+7+5+7+12+8+5+7+3+12+5+5+7+6+9+11+8+9+9+11+13+13=M中取5个 C(M,5);如果你又说每个组合不同.如果你要把相同重量的球都当是相同的.那么直接就是C(23,5);那么那些数量不是废了吗.要不然答案就在上面楼说过的了...望指正,, 有点思路了首先把全部的球都当成不同种类,然后如你所说2+5+7+5+7+12+8+5+7+3+12+5+5+7+6+9+11+8+9+9+11+13+13=M中取5个,做个全排列然后剔除有相同重量的最后剔除位置不同但种类相同的剩下的就是了shinefen 谢谢你 如何在 CWebBrowser2 中获取 CWebBrowser2 自身的句柄? CDialog的子类的ShowWindow方法获取不到句柄 关于报表打印 为什么输出的不是A而是4153f8,想不通,帮我看看,在线等,谢谢 问一个 低级的问题。我看用vc做的软件都有个界面,大部分都是用代码写的,怎么样操作才能向vb一打开就能够看到“窗体编辑器”和“工具箱 特殊的模式\非模式对话框问题 如何定义一个记录打开文本的字符的字符串链表! 谁有测试短信的网关程序? 关于打印的问题 WIN api里面的Loadbitmap的用法 招聘C++工程师(北京) 关于命令更新与OnCreate()
int count = 5;
int find(int arr[], int count)
{
if (count == 0)
{
//找到
}
else {
for ( int i = 0; i <= arr[0]; i++)
{
if (count - i >= 0)
find(arr+1, count - i)
else
break;
}
}
}
我的思路是:对23种球循环第一棵树有22棵子树,第二棵树有21棵子树,这样的话就建19棵树,并且最后一棵树只有一棵子树。选择结点的时候按照那23种球的编号顺序来(所有的比自己编号小的都是自己的后代),能够保证不会重复,删除深度不够5的。对每一条路径又有x1*x2*x3*x4*x5种组合x1为该路径中第一个结点所代表球类的个数。
方法挺笨的,也不知道对不对。
在你得到的每个组合里面
把这组合里面的个数量的球.相乘.然后就加上下一个组合的各球的数量乘.... {a,b,c,d,e,f,g,h,...}
{2,5,7,5,7,12,8,5,7,3,12,5,5,7,6,9,11,8,9,9,11,13,13}; 组合{a,b,c,d,e}=2*5*7*5*7
+
组合{a,b,c,d,f}=2*5*7*5*12
+
...
那么那些数量不是废了吗.要不然答案就在上面楼说过的了...
望指正,,
首先把全部的球都当成不同种类,然后如你所说2+5+7+5+7+12+8+5+7+3+12+5+5+7+6+9+11+8+9+9+11+13+13=M中取5个,做个全排列
然后剔除有相同重量的
最后剔除位置不同但种类相同的
剩下的就是了
shinefen 谢谢你