撲克牌洗牌的演算法
簡單來說撲克牌洗牌的規則
就是亂數產生52張牌
但是號碼不能重複 ( 一副牌不會有兩張相同的 )
如果每亂數產生一組號碼
就要回頭去檢查是否已經出現過的話
成本過於龐大
所以我們先將52張牌依順序產生好
然後在任意交換兩張牌的位置
重複52次
這樣就可以達到洗牌的目的
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
const int iCardCount = 52;
int _tmain(int argc, _TCHAR* argv[])
{
int i_arrCard[iCardCount];
// make points of poker card
for(int i=0; i<iCardCount; i++)
i_arrCard[i] = i;
// set random seed
srand(time(NULL));
// random swap two cards
int iIndex = 0;
int iTmp = 0;
for(int i=0; i<iCardCount; i++)
{
iIndex = rand() % (iCardCount-1);
iTmp = i_arrCard[iIndex];
i_arrCard[iIndex] = i_arrCard[iIndex+1];
i_arrCard[iIndex+1] = iTmp;
}
for(int i=0; i<iCardCount; i++)
{
::printf("%d\n", i_arrCard[i]);
}
char cPause;
do
{
cPause = getchar();
if(cPause == EOF)
break;
} while(cPause != '\n');
return 0;
}