正文

C语言中一个关于洗牌的问题2005-09-23 12:30:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/home/5155.html

分享到:

#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).}

阅读(3788) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册