有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种球,顺序不限,一共有多少种选法?
我只搞出每种球没有数量限制的组合...
热心的朋友帮忙搞下,先谢谢了

解决方案 »

  1.   

    黑加白,怎么乘啊,我也想X啊,怎么X啊,我都X废了...
      

  2.   

    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;
                          }
                  }
                 }
      

  3.   

    楼上了,连return都没有,你怎么递归的?
      

  4.   

    哥们死机了...count不动啊...无限了...arr越界....
      

  5.   

    题目有点不大理解,选5种球,每种球选几个不定是吧?
    我的思路是:对23种球循环第一棵树有22棵子树,第二棵树有21棵子树,这样的话就建19棵树,并且最后一棵树只有一棵子树。选择结点的时候按照那23种球的编号顺序来(所有的比自己编号小的都是自己的后代),能够保证不会重复,删除深度不够5的。对每一条路径又有x1*x2*x3*x4*x5种组合x1为该路径中第一个结点所代表球类的个数。
    方法挺笨的,也不知道对不对。
      

  6.   

    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
    +
    ...
      

  7.   

    这已经是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);
    那么那些数量不是废了吗.要不然答案就在上面楼说过的了...
    望指正,,
      

  8.   

    有点思路了
    首先把全部的球都当成不同种类,然后如你所说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 谢谢你