CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

求解发牌算法!

楼主chufeng()2002-03-25 15:18:13 在 C/C++ / C语言 提问

题目是这样的:  
  用C语言编写一段程序:现有一副出去大小王的牌共52张,将这副牌随即发给四个玩家,并打印出来。现有一个random函数产生一个0到1之间的小数可以调用。  
  谢谢指教! 问题点数:20、回复次数:6Top

1 楼fangrk(加把油,伙计!)回复于 2002-03-25 15:31:49 得分 5

random(52):产生一个int属于[0,51]。  
  int   card[52]初始化全部为0  
  int   cardCount=0;  
  i=random(52);  
  如果card[i]==0{  
  i/4解释为牌号  
  i%4解释为花色  
  card[i]=1;  
  cardCount++;  
  }  
  重复循环,直到cardCount==51  
  效率不高Top

2 楼shornmao(毛豆子[死猫])回复于 2002-03-25 16:21:37 得分 2

按自然递增的顺序初始化整个数组,然后从第一个元素开始,依次与后续元素中的任一个元素(随机产生)交换。Top

3 楼Alex_C(广义上的好人)回复于 2002-03-25 16:29:35 得分 11

/*发牌程序*/  
   
  #include<stdio.h>  
  #include<stdlib.h>  
  #include<time.h>  
  #include<conio.h>  
   
  void   shuffle(int[][13]);  
  void   deal(const   int[][13],const   char   *[],const   char   *[]);  
   
  main()  
    {  
    char   *suit[4]={"Hearts","Diamonds","Clubs","Spades"};  
        char   *face[13]={"Ace","Deuce","Three","Four",  
            "Five","Six","Seven","Eight",  
                                          "Nine","Ten","Jack","Queen","King"};  
   
    int   deck[4][13]={{0}};  
   
        srand(time(NULL));  
   
        shuffle(deck);  
   
        deal(deck,face,suit);  
   
        getch();  
        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){  
              row=rand()%4;  
                    column=rand()%13;  
              }  
   
      wDeck[row][column]=card;  
   
      }  
    }  
   
   
    void   deal(const   int   wDeck[][13],const   char   *   wface[],  
        const   char   *wSuit[])  
    {  
    int   card,   row,column;  
   
        for   (card=1;card<=52;card++)  
   
        for   (row=0;row<=3;row++)  
   
              for   (column=0;column<=12;column++)  
   
                    if   (wDeck[row][column]==card)  
                          printf   ("%5s   of   %-8s%c",  
                                  wface[column],wSuit[row],  
                                              card   %2==0?"/n":"/t");  
    }  
   
  Top

4 楼missdeer(思鹿)回复于 2002-03-25 18:46:52 得分 2

用一个52个元素的数组,随机取出其中一个元素,然后将该元素与最后的一个交换,再随机取出一个1-51之间的元素,再和倒数第二个元素交换,再取出一个1-50之间的元素,再和倒数第三个元素交换……Top

5 楼fangrk(加把油,伙计!)回复于 2002-03-26 08:28:00 得分 0

missdeer(思鹿)   的方法不错!Top

6 楼lqqchen(李过)回复于 2002-03-26 17:32:03 得分 0

死猫和思鹿的方法是一样的.  
  都是有效的方法.  
  你可以拿副牌来模拟这种算法.Top

相关问题

  • 算法求解
  • 求解算法
  • 求解算法,急
  • 求解一算法
  • 求解一算法
  • 魔方算法求解?
  • 求解一算法难题!
  • 高分求解算法
  • 逆波兰算法求解!!
  • 求解八皇后算法?

关键词

  • cardcount
  • card
  • shuffle
  • deck
  • 元素
  • random
  • 产生
  • const
  • include
  • char

得分解答快速导航

  • 帖主:chufeng
  • fangrk
  • shornmao
  • Alex_C
  • missdeer

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo