可參考洗牌程式的作法,洗法有兩種:
- 抽牌法:
先把牌排好放在陣列中,以亂數產生 index 抽出剩餘的牌,直到抽完所有的牌。此法不用比對,比較麻煩的是要維護牌的陣列。 - 牌交換:
同樣先把牌排好放在陣列中,以亂數產生 2 個 index,將那兩張牌交換,即 index 所指的數值交換。或以亂數產生 1 個 index,由第一張依序與亂數 index 交換。
這兩種方法都不需要與已產生出來的亂數做比對,比較實用一些。
C++:
-
//洗牌法之牌交換
-
int iAry[6]={1,2,3,4,5,6};
-
int i,j,k,temp;
-
for(k=0;k<100;k++) //交換100次
-
{
-
i=random(6);
-
j=random(6);
-
temp=iAry[i];
-
iAry[i]=iAry[j];
-
iAry[j]=temp;
-
}
-
printf("%d\n%d\n%d\n%d\n%d\n%d",
-
iAry[0],iAry[1],iAry[2],iAry[3],iAry[4],iAry[5]);