不同颜色小球的选择方法
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;
}
}
}
}
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种情况;
欢迎大家讨论,斧正
转载于:https://www.cnblogs.com/liveformyself/p/11490543.html