利用随机数产生器 rand,设计一个程序由电脑发桥牌给 4 位玩家,并
输出每位玩家所分得的花色和点数。梅花以 C,方块以 D,红心以 H,
黑桃以 S 表示。牌点用 A,2,3,4,5,6,7,8,9,10,J,Q,K 表
示。  csc Ex0718.cs <Enter>
  Ex0718 <Enter>
  C2  C4  C7  DA  D4 D10  DQ  HA  HJ  HK  S2  S6 S10
  C3  C8  CJ  CK  D6  D8  D9  H7 H10  SA  S5  S8  SQ
  CQ  DK  H4  H6  H8  H9  HQ  S3  S4  S7  S9  SJ  SK
  CA  C5  C6  C9 C10  D2  D3  D5  D7  DJ  H2  H3  H5

解决方案 »

  1.   

    先产生一个数%4的表示CDHS之一,再产生一个数%13代表牌点
    最好不用Random,而用System.Security.Cryptography.RNGCryptoServiceProvider
      

  2.   

    可是题目要求用random实现!!
      

  3.   

    做4个列表,每个1——13,%4随机取列表,%13取随机数,把对应index那个数作为牌面,并且将其移到列表最后。下次用%12取随机。循环直到发完全部牌。
      

  4.   

    自己设计吧!
    给一数组如,  Arr,里面顺序放所有牌,
    然后令Arr中的顺序改为随机就可以.
      

  5.   

    用一个arraylist,把所有的牌都进去,然后,每一次产生一个比上一次小1(第一次是总牌数-1)的随机数,按照这个数把list的那个牌移出来(list里面就没有那张牌了,所有不存在重复).当随机数到1的时候,把最后一张牌发完就完成了.
      

  6.   

    为了简便起见,把花色和牌的大小组合成一个由小到大的52的牌吧,你也可以建一个关于牌的类,分别保存大小和花色.//先弄一个链表
    ArrayList alCard=new ArrayList();
    foreach(int i=0;i<52;i++)
      alCard.Add(i);//把牌分出去或洗到另一个链表里面
    Random rd=new Random();
    int nIndex=52;
    while(nIndex>0)
    {
        int iGet=alCard[rd.Next(--nIndex)];
        alCard.Remove(iGet);
        //把iGet就是一个随机得到的牌,这里可以把它分出去或存到另一个链表里(洗牌);
    }