牌组

三个人头牛的牌组:

#include<stdio.h>
#include<string.h>
#include<time.h>
typedef struct  
{
    char suit [5];
    char face [6];
 }pai;
 void fuzhi(pai *a);/*给牌组赋值*/ 
 void dex(int *a);/*给牌组下标初始化*/
 void xipai(int *a); /*打乱下标*/
 void fapai(pai *a,int *b,int n);/*发一定数目的牌*/
 int main()
 {
     pai one[52];
     int index[52];
     fuzhi(one);
     dex(index);
     xipai(index);
     fapai(one,index,15);
     return 0;
 }
 void fuzhi(pai *a)
 {
     char *n[]={"1","2","3","4","5","6","7","8","9","10","J","Q","K"};
     char *h[]={"红桃","黑桃","方片","梅花"}; 
     int i;
     for(i=0;i<52;i++)
     {
         strcpy(a[i].suit,n[i%13]);
         strcpy(a[i].face,h[i/13]);
     }
 }
 void fapai(pai *a,int *b,int n)
 {
     int i=0,j=0;
     for(i=0;i<n;i++)
    {
         printf("%s  %s
",a[b[i]].suit,a[b[i]].face);
         j++;
         if(j%5==0)
         printf("
");
    }
 }
  void dex(int *a)
{
      int i=0;
      for(i=0;i<52;i++)
      {
          a[i]=i;
      }
}
  void xipai(int *a)
{
     int i=0,j=0,temp=0;
     srand(time(NULL));
     for(i=0;i<52;i++)
     {
         j=rand()%52;
         if(i!=j)
         {
             temp=a[j];
             a[j]=a[i];
             a[i]=temp;
         }
     }
} 

总结:建立52个结构体做为52张牌(没有大小王),在定义一个长度为52的整形数组,作为牌的下标。

  洗牌的技巧:先给下标数组赋初值1-52,随机产生两个数,让着两个数作为下标数组的下标,让这两个元素的值互换,通过产生52次,交换52次,足以打乱牌下标的序号。

  定义字符数组时,注意字符串结束标志也是占一个字符长度大小的,适当定义大点,别越界。

  给字符串赋值,不能用=号,因为不能给数组名赋值,它只代表一个地址,所以要用strcpy函数,将一个字符串赋值给另一个字符串,strcpy(a,b)将b复制给a.

原文地址:https://www.cnblogs.com/TX980502/p/6516699.html