不同顏色小球的選擇方法
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種情況;
歡迎大家討論,斧正