正文

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

}

阅读(3630) | 评论(2)


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

评论

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