#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).
}
正文
C语言中一个关于洗牌的问题2005-09-23 12:30:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/home/5155.html
阅读(3630) | 评论(2)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论