洗扑克牌算法

来源:互联网 发布:怎么做淘宝客赚钱 编辑:程序博客网 时间:2024/04/30 03:03

一副扑克共有52张,4中花色

如果我们随机的生成一个数字和花色的话,可能会产生和前面一样的数据。这里我们采用随机换牌的方法洗牌

(1)先按顺序生成一副扑克

(2)产生一个0~51的随机数,将此随机数作为扑克的下标与第i张牌交换,然后随机的交换52次结束。就会得到一个打乱顺序的扑克

其中ASCII中的3,4,5,6对应着扑克中的红桃,方片,梅花,黑桃

实现代码如下:

#include <stdio.h>#include <stdlib.h>#include <time.h>typedef struct card{int sign;       //表示花色char number;    //表示数字}card;card oneCard[52];void display(){for(int i=0; i<52; i++){if(i%13 ==0){printf("\n");}printf("%c%c\t",oneCard[i].sign,oneCard[i].number);}printf("\n");}void shuffle(){int sign,temp,random;card tempCard;sign = 2;for(int i=0; i<52; i++){//先生成一副扑克if(i%13 == 0){sign++;}oneCard[i].sign = sign;temp = i%13;switch(temp){case 0:oneCard[i].number = 'A';break;case 9:oneCard[i].number = '0';           //这里用0当10break;case 10:oneCard[i].number = 'J';break;case 11:oneCard[i].number = 'Q';break;case 12:oneCard[i].number = 'K';break;default :oneCard[i].number = temp+'1';}}printf("洗牌前:\n");display();//将扑克打乱顺序srand(time(0));for(i=0; i<52; i++){//任意交换52次达到洗牌的目的random = rand()%52;tempCard = oneCard[random];oneCard[random] = oneCard[i];oneCard[i] = tempCard;}}void main(){shuffle();printf("洗牌后:\n");display();}

运行结果:

原创粉丝点击