注册 登录
编程论坛 C++教室

排列组合问题

fl8962 发布于 2014-09-11 05:20, 873 次点击
100个乒乓球,20个红色,20个蓝色,20个绿色,20个白色,20个黑色。从中随机取出8个,有多少种颜色组合?(今题计算机课考试题,没做出来,高中学的都忘了)
13 回复
#2
stop12042014-09-11 07:55
-.- 百度下公式好了.我数学就是不行.
看样子 就是 8个数字 有可能全是白是也有可能全是红色.  球的数量就不要理了.只是问你组合
转过来就是 1-5 之间组成8位数 有多少种组合,(可重复  即11111111)

我只记得最简单的那种思路就是  第一位有5种可能性,第二位也是5种.----一直到第八位 .然后就是 5^8 =
390625

不知道我的想法有没错

[ 本帖最后由 stop1204 于 2014-9-11 08:00 编辑 ]
#3
fl89622014-09-11 07:59
回复 2 楼 stop1204
额,我就是把公式忘了呀。我把问题贴在百度上了,但是没搜出来。。。
#4
stop12042014-09-11 08:01
回复 3 楼 fl8962
重新看下我刚才那个回复,..  你去试一下吧啊 应该是这样算

如果每个球加上编号.求同颜色不同编号的组合 那就有难度了.

[ 本帖最后由 stop1204 于 2014-9-11 08:03 编辑 ]
#5
fl89622014-09-11 08:20
回复 4 楼 stop1204
谢谢回复,不过我觉得应该没那么大。我觉得我一直被那100个球迷惑了,应该和100没关系。
我觉得应该是
c(8+5-1,5-1)=12!/4!*8!=495.
#6
stop12042014-09-11 08:31
回复 5 楼 fl8962
5种颜色3位组合就有125种  4位组合就 625种

所以你觉得呢.
程序代码:

111    112    113    114    115   
121    122    123    124    125   
131    132    133    134    135   
141    142    143    144    145   
151    152    153    154    155   

211    212    213    214    215   
221    222    223    224    225   
231    232    233    234    235   
241    242    243    244    245   
251    252    253    254    255   

311    312    313    314    315   
321    322    323    324    325   
331    332    333    334    335   
341    342    343    344    345   
351    352    353    354    355   

411    412    413    414    415   
421    422    423    424    425   
431    432    433    434    435   
441    442    443    444    445   
451    452    453    454    455   

511    512    513    514    515   
521    522    523    524    525   
531    532    533    534    535   
541    542    543    544    545   
551    552    553    554    555
//-------------------------------125


[ 本帖最后由 stop1204 于 2014-9-11 08:32 编辑 ]
#7
rjsp2014-09-11 08:31
以下是引用fl8962在2014-9-11 08:20:29的发言:

谢谢回复,不过我觉得应该没那么大。我觉得我一直被那100个球迷惑了,应该和100没关系。
我觉得应该是
c(8+5-1,5-1)=12!/4!*8!=495.

    unsigned n = 0;
    for( unsigned a=0; a<=8; ++a )
        for( unsigned b=0; b<=8-a; ++b )
            for( unsigned c=0; c<=8-a-b; ++c )
                for( unsigned d=0; d<=8-a-b-c; ++d )
                    ++n;
    printf( "%u\n", n );
#8
fl89622014-09-11 08:35
回复 6 楼 stop1204
重复的不算,比如212 和221 算成一种。是问组合并不是排列。
#9
stop12042014-09-11 08:35
回复 7 楼 rjsp
这个应该是不重复颜色的话
#10
stop12042014-09-11 08:36
回复 8 楼 fl8962
  会错题意了.
#11
fl89622014-09-11 08:37
回复 7 楼 rjsp
哎,这学期刚开始学离散结构。感觉跟数学相关性好大。好久都没碰数学了。谢谢R版。
#12
fl89622014-09-11 08:49
回复 7 楼 rjsp
R版能讲一下代码的数学原理么。。。纯数学的角度我会做了,但是结合上你的代码,还是不懂啊。。
#13
rjsp2014-09-11 10:37
红球可以取0至8个
蓝球可以取0至(8-已取的红球数目)个
绿球可以取0至(8-已取的红球数目-已取的蓝球数目)个
白球可以取0至(8-已取的红球数目-已取的蓝球数目-已取的绿球数目)个
黑球只能取   (8-已取的红球数目-已取的蓝球数目-已取的绿球数目-已取的白球数目)个

或者这么想,对于 a + b + c + d + e = 8,设abcde都是自然数,有多少种不同的取值可能。
也就是 a + b + c + d <= 8 有多少种不同的取值可能。
#14
懒喵敏2014-09-12 00:26
蓝绿黑白:一种色,结果4种情况;两种色,1+7,2+6,3+5,4+4四种组合,结果有C(2,4)*A(2,2)*4=48种情况;三色,1+1+6,1+2+5,1+3+4,2+2+4,2+3+3,五种组合,结果有C(3,4)*A(3,3)*5=120种情况;四色,1+1+1+5,1+1+2+4,1+1+3+3,1+2+2+3,1+3+3+1五种组合,结果有A(4,4)*5=120种情况。合计4+48+120+120=292

[ 本帖最后由 懒喵敏 于 2014-9-12 00:36 编辑 ]
1