鱼C论坛

 找回密码
 立即注册
查看: 1627|回复: 5

[已解决]S1E31洗牌发牌

[复制链接]
发表于 2021-10-7 20:02:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>

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

  12. //洗牌
  13. int Xipai()
  14. {
  15.         int i, j;
  16.         time_t t;
  17.        
  18.         srand((unsigned)time(&t));
  19.        
  20.         //生成1-54的伪随机数
  21.         for (i = 0;i < 52;i++)
  22.         {
  23.                 str[i] = rand() % 54 + 1;
  24.                 //printf("%d ",str[i]);
  25.                
  26.         }
  27.         printf("\n");
  28. }


  29. //发牌 一一对应
  30. char Fapai()
  31. {
  32.         int i, j, k = 0;
  33.         char *p[52];
  34.        
  35.         //这里我想将洗牌后的地址对应的指针存入一个指针数组中,使数组中的指针指向洗牌后在data中对应的牌
  36.         for(i = 0;i < 52;i++)
  37.         {
  38.                 *p++ =  data + str[i];
  39.         }       
  40.         while (*p++ != '\0')
  41.         {
  42.                 printf("%s ", *p);
  43.                
  44.         }
  45. }
复制代码


我想将洗牌后的地址对应的指针存入一个指针数组中,使数组中的指针指向洗牌后在data中对应的牌,请问该怎么写?
最佳答案
2021-10-18 18:16:33
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>

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

  9. void Xipai(int d[])
  10. {
  11.         int i , j , k                                         ;
  12.         time_t  t                                             ;
  13.       
  14.         srand((unsigned)time(& t))                            ;
  15.         for(i = 0 ; i < 54 ; i ++) d[i] = 0                   ;
  16.         d[0] = rand() % 54 + 1                                ;
  17.         for(i = 1 ; i < 54 ;) {
  18.                 k = rand() % 54 + 1                           ;
  19.                 for(j = 0 ; j < i ; j ++) if(d[j] == k) break ;
  20.                 if(j == i) d[i ++] = k                        ;
  21.         }
  22. }

  23. int main(void)
  24. {
  25.         int d[54] = {0} , i                                   ;
  26.         Xipai(d)                                              ;
  27.         for(i = 0 ; i < 54 ; i ++) {
  28.                 if(i) printf(",")                             ;
  29.                 printf("%s" , data[d[i] - 1])                 ;
  30.         }
  31.         printf("\n")                                          ;
  32. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-18 17:21:53 | 显示全部楼层
       没看懂你的意图,你是想让本次发牌受前一次发牌的影响?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-18 17:34:23 | 显示全部楼层
jackz007 发表于 2021-10-18 17:21
没看懂你的意图,你是想让本次发牌受前一次发牌的影响?

之前我想的是,3个人一人14张牌,那就产生3X14=52个随机数,这52个随机数对应54张牌里面的52张,将这52个随机数作为存放54张牌数组的索引号,将随机数对应牌的地址通过指针存放在一个数组中,打印这52个指针指向的值就相当于洗牌了(当时没考虑到52个随机数可能会有重复)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-18 18:08:38 | 显示全部楼层
雨中漫步~ 发表于 2021-10-18 17:34
之前我想的是,3个人一人14张牌,那就产生3X14=52个随机数,这52个随机数对应54张牌里面的52张,将这52个 ...
  1. void Xipai(int d[])
  2. {
  3.         int i , j , k                                         ;
  4.         time_t  t                                             ;
  5.       
  6.         srand((unsigned)time(& t))                            ;
  7.         for(i = 0 ; i < 52 ; i ++) d[i] = 0                   ;
  8.         d[0] = rand() % 52 + 1                                ;
  9.         for(i = 1 ; i < 52 ;) {
  10.                 k = rand() % 52 + 1                           ;
  11.                 for(j = 0 ; j < i ; j ++) if(d[j] == k) break ;
  12.                 if(j == i) d[i ++] = k                        ;
  13.         }
  14. }
复制代码

        调用这个函数,每次调用,数组 d 中都会有 52 个互相不重复,数值为 1 ~ 52 的不同数值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-18 18:16:33 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>

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

  9. void Xipai(int d[])
  10. {
  11.         int i , j , k                                         ;
  12.         time_t  t                                             ;
  13.       
  14.         srand((unsigned)time(& t))                            ;
  15.         for(i = 0 ; i < 54 ; i ++) d[i] = 0                   ;
  16.         d[0] = rand() % 54 + 1                                ;
  17.         for(i = 1 ; i < 54 ;) {
  18.                 k = rand() % 54 + 1                           ;
  19.                 for(j = 0 ; j < i ; j ++) if(d[j] == k) break ;
  20.                 if(j == i) d[i ++] = k                        ;
  21.         }
  22. }

  23. int main(void)
  24. {
  25.         int d[54] = {0} , i                                   ;
  26.         Xipai(d)                                              ;
  27.         for(i = 0 ; i < 54 ; i ++) {
  28.                 if(i) printf(",")                             ;
  29.                 printf("%s" , data[d[i] - 1])                 ;
  30.         }
  31.         printf("\n")                                          ;
  32. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-18 18:34:40 | 显示全部楼层

我何时才能如此优秀,感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 09:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表