撲克牌洗牌的演算法

撲克牌洗牌的演算法

 

簡單來說撲克牌洗牌的規則

就是亂數產生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;
		}