从五种小球中任取三种,有多少种取法

不同颜色小球的选择方法

1.问题重述

有红黄蓝白黑五种颜色的小球若干个,每次从里面任意取三个小球,总共有多少种取法

2.问题分析

1.首先,题中所描述的是一次性取三种小球,所以不考虑取的顺序问题,对于所给的五中球进行编号为 0,1,2,3,4,分别代表红黄蓝白黑。

2.假设排列形式的取法
考虑排列顺序,即每取一个小球的概率是相等的,但是根据题意应该剔除有相同颜色的球的情况,所以总数为A(5,3)(排列数)减去三种球颜色相同的情况即A(5,3)-3(具体代码如下)


    int i,j,k;
    for(i=0;i<=4;i++)<br>
    {  
       for(j=0;j<=4;j++)<br>
        {  
          for(k=0;k<4;k++)<br>
             {
                if(i!=j&&i!=k&&j!=k)<br>
                  {
                   cout<<i<<j<<k<<endl;
                  }
             }

         }
      }
    
```<br>
3.组合形式的取法

根据组合数的性质,不考虑排列顺序,若还以排列数的方式进行求解,会造成许多的重复情况,并且还需要额外的空间来记录一种取法是否已经被取过。故不适用<br>
现在从如何取得角度来考虑<br>
有五个颜色不同的小球,总共的取法肯定是C(5,3)=10种,但是具体是哪十种,在数据规模小的情况下,可以一一枚举出来,但数据量太大的话,需要按照一定的规律去寻找。<br>

一般来说,取出三个球,为了避免出现重复情况,需要先保证固定两个球,然后去移动第三个球<br>
比如 对于 红 黄 蓝 白 黑 先固定 红 黄 两个球,然后移动第三个球,可以分别是 蓝 白 黑,由此<br>
产生3种组合形式 红 黄 蓝 ,红 黄 白 ,红 黄 黑;由于 固定 红 黄 和固定 黄 红 所产生的组合<br>
是相同的 故不再固定 黄 红 <br>
在固定 黄 蓝 时,第三个球就不能选择 红,因为红黄蓝已经出现过了,只能选择 白和黑,依此规律,
依次固定 
红 蓝 ,红 白 ,但是不能固定红  黑 ,因为固定红黑了之后 第三个·球没办法选。<br>
在固定完  红 蓝 ,红 黄 ,红 白 后,所有的有红球的情况已经全部取完,接下来就是对 黄 蓝 白 <br>黑 进行C(4,3);<br>
可以看出 固定的第一个球最多只能移动到 蓝 色,因为移动到 白球 或者 黑球 后面两个球就无法 选择<br>
同样的 第二个球只能移动到 白球 ,移动到黑球 最后一个球就无法 选择<br>
第三个球 可以移动到黑球。
<br>
据此可以写出组合数C(5,3)的算法<br>
int i,j,k;
for(i=0;i<=2;i++)
{
   for(j=i+1;j<=3;j++)
   {
    for(k=j+1;k<=4;k++)
    {
      cout<<i<<j<<k<<endl;
    }
   }
}

3.问题结果

经过程序求解得到最终答案

红黄蓝(012)  红黄白(013)   红黄黑(014)   红蓝白(023)  红蓝黑(024)  红白黑(034)  黄蓝白(123)  黄蓝黑(124)   黄白黑(134)  蓝白黑(234)


一共10种情况;

欢迎大家讨论,斧正

posted @ 2019-09-09 11:10  Kevin,ChanD  阅读(3591)  评论(0编辑  收藏  举报