#include<stdio.h>#include<stdlib.h>#include <time.h>void shuffle(int [][13]);void deal(const int [][13],const char *[],const char *[]);main(){ const char *suit[4]={"Hearts","Diamonds","Clubs","Spades"}; const char *face[13]={"1","2","3","4","5","6","7","8","9","10","J","Q","K"}; int deck[4][13]={0}; // deck[4][13] 全是零 srand(time(NULL)); shuffle(deck); deal(deck,face,suit); return 0;}void shuffle(int wDeck[][13]){ int card,row,column; for(card=1;card<=52;card++) { row=rand()%4; column=rand()%13; while(wDeck[row][column]!=0)// 不是零,表示已经赋值。wDeck[row][column]就是deck[4][13];//wDeck[row][column]是用参数传过来的 { row=rand()%4;//当wDeck[row][column]!=0,重新产生随机数 column=rand()%13; } wDeck[row][column]=card;//赋值 for结束后wDeck[row][column]中放的是1~52,这是52张牌所有排列组合中的一种 }}void deal(const int wDeck[4][13],const char *wFace[],const char *wSuit[]){ int card,row,column; for(card=1;card<=52;card++) for(row=0;row<4;row++) for(column=0;column<=12;column++) //这里循环,产生52张牌所有可能的组合 if(wDeck[row][column]==card) printf("%5s of %-8s%c",wFace[column],wSuit[row],card%2==0?'\n':'\t');//输出所有排列组合中和wDeck[row][column]中相同的一种//比方 如果 wDeck[3][10] 放的是 1 ,那么输出wFace[10] (即J),输出wSuit[3] (即Spades).}

评论