雨中漫步~ 发表于 2021-10-7 20:02:11

S1E31洗牌发牌

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int str;//用于存放随机数
//char str1 = {0};
const char *data[] = {"黑A","黑2","黑3","黑4","黑5","黑6","黑7","黑8","黑9","黑10",
                               "红A","红2","红3","红4","红5","红6","红7","红8","红9","红10",
                               "梅A","梅2","梅3","梅4","梅5","梅6","梅7","梅8","梅9","梅10",
                               "方A","方2","方3","方4","方5","方6","方7","方8","方9","方10",
                               "黑J","黑Q","黑K","红J","红Q","红K","梅J","梅Q","梅K","方J","方Q","方K",
                               "大王","小王"};

//洗牌
int Xipai()
{
        int i, j;
        time_t t;
       
        srand((unsigned)time(&t));
       
        //生成1-54的伪随机数
        for (i = 0;i < 52;i++)
        {
                str = rand() % 54 + 1;
                //printf("%d ",str);
               
        }
        printf("\n");
}


//发牌 一一对应
char Fapai()
{
        int i, j, k = 0;
        char *p;
       
        //这里我想将洗牌后的地址对应的指针存入一个指针数组中,使数组中的指针指向洗牌后在data中对应的牌
        for(i = 0;i < 52;i++)
        {
                *p++ =data + str;
        }       
        while (*p++ != '\0')
        {
                printf("%s ", *p);
               
        }
}

我想将洗牌后的地址对应的指针存入一个指针数组中,使数组中的指针指向洗牌后在data中对应的牌,请问该怎么写?

jackz007 发表于 2021-10-18 17:21:53

       没看懂你的意图,你是想让本次发牌受前一次发牌的影响?

雨中漫步~ 发表于 2021-10-18 17:34:23

jackz007 发表于 2021-10-18 17:21
没看懂你的意图,你是想让本次发牌受前一次发牌的影响?

之前我想的是,3个人一人14张牌,那就产生3X14=52个随机数,这52个随机数对应54张牌里面的52张,将这52个随机数作为存放54张牌数组的索引号,将随机数对应牌的地址通过指针存放在一个数组中,打印这52个指针指向的值就相当于洗牌了(当时没考虑到52个随机数可能会有重复)

jackz007 发表于 2021-10-18 18:08:38

雨中漫步~ 发表于 2021-10-18 17:34
之前我想的是,3个人一人14张牌,那就产生3X14=52个随机数,这52个随机数对应54张牌里面的52张,将这52个 ...

void Xipai(int d[])
{
      int i , j , k                                       ;
      time_tt                                             ;
      
      srand((unsigned)time(& t))                            ;
      for(i = 0 ; i < 52 ; i ++) d = 0                   ;
      d = rand() % 52 + 1                              ;
      for(i = 1 ; i < 52 ;) {
                k = rand() % 52 + 1                           ;
                for(j = 0 ; j < i ; j ++) if(d == k) break ;
                if(j == i) d = k                        ;
      }
}
      调用这个函数,每次调用,数组 d 中都会有 52 个互相不重复,数值为 1 ~ 52 的不同数值。

jackz007 发表于 2021-10-18 18:16:33

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

const char * data[] = {"黑A","黑2","黑3","黑4","黑5","黑6","黑7","黑8","黑9","黑10","黑J","黑Q","黑K" ,
                      "红A","红2","红3","红4","红5","红6","红7","红8","红9","红10" ,"红J","红Q","红K" ,
                      "梅A","梅2","梅3","梅4","梅5","梅6","梅7","梅8","梅9","梅10","梅J","梅Q","梅K",
                      "方A","方2","方3","方4","方5","方6","方7","方8","方9","方10","方J","方Q","方K",
                      "大王","小王"}                                                                  ;

void Xipai(int d[])
{
      int i , j , k                                       ;
      time_tt                                             ;
      
      srand((unsigned)time(& t))                            ;
      for(i = 0 ; i < 54 ; i ++) d = 0                   ;
      d = rand() % 54 + 1                              ;
      for(i = 1 ; i < 54 ;) {
                k = rand() % 54 + 1                           ;
                for(j = 0 ; j < i ; j ++) if(d == k) break ;
                if(j == i) d = k                        ;
      }
}

int main(void)
{
      int d = {0} , i                                 ;
      Xipai(d)                                              ;
      for(i = 0 ; i < 54 ; i ++) {
                if(i) printf(",")                           ;
                printf("%s" , data - 1])               ;
      }
      printf("\n")                                          ;
}

雨中漫步~ 发表于 2021-10-18 18:34:40

jackz007 发表于 2021-10-18 18:16


我何时才能如此优秀,感谢{:5_110:}
页: [1]
查看完整版本: S1E31洗牌发牌