鱼C论坛

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

[已解决]大佬求助!!!!,一个小游戏

[复制链接]
发表于 2022-10-16 22:47:31 | 显示全部楼层 |阅读模式

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

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

x
给定一个四位数,用户猜这个数字,可以猜七次,每猜一次,系统给出对了几个数字,还有对了几个数字的位置,比如一个数字3402,用户猜3401,就是对了3个数字,三个位置
#include<stdio.h>
int main() {
        int put,i=1,num,k=1,ans,ans1,date=0,wher=0;
        printf("请输入一个四位数");
        scanf("%d",&put);
        for(; k<=7; k++) {
                printf("请输入你的答案");
                scanf("%d",&ans);
                for(; i<=4; i++) {

                        num = put%10;
                        ans1 = ans%10;
                        if(num == ans1) {
                                date += 1 ;
                                wher = (i==1)?wher += 1:wher;
                                continue;
                        }

                        ans /= 10;
                }
                for (; i<=4; i++) {
                        num = put/10%10;
                        ans1 = ans%10;
                        if (num == ans1) {
                                date += 1 ;

                                wher = (i == 2)?wher += 1:wher;

                                continue;
                        }
                        ans /= 10;
                }
                for (; i<=4; i++) {
                        num = put / 100%10;
                        ans1 = ans%10;
                        if (num == ans1) {
                                date += 1 ;

                                wher = ( i == 3)?wher += 1:wher;
                                continue;

                        }
                        ans /= 10;
                }
                for (; i<=4; i++) {
                        num = put /1000%10;
                        ans1 = ans % 10;
                        if (num == ans1) {
                                date += 1 ;

                                wher = ( i == 4)?wher  += 1:wher;
                                continue;
                        }
                        ans /= 10;
                }
                printf("你对了%d个数字\n",date);
                printf("你对了%d个位数\n",wher);

        }



}
最佳答案
2022-10-17 09:45:42
本帖最后由 jackz007 于 2022-10-17 10:10 编辑
mammm 发表于 2022-10-16 23:30
应该可以把,我们玩过,真的能猜出来,虽然大部分还是要归功于运气,能不能帮我看下代码有什么问题,结果 ...


        随机数版本
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>

  4. int generator(void)
  5. {
  6.         int d[4] , i , j , k , r , x                                                         ;
  7.         time_t t                                                                             ;
  8.         srand((unsigned) time(& t))                                                          ;
  9.         for(r = 0 ; r < 1000 ;) {
  10.                 for(i = 0 ; i < 4 ;) {
  11.                         x = rand() % 10                                                      ;
  12.                         for(j = 0 ; j < i ; j ++) if(d[j] == x) break                        ;
  13.                         if(j == i) d[i ++] = x                                               ;
  14.                 }
  15.                 for(k = rand() % 10 , i = r = 0 ; i < 4 ; k ++ , i ++) r = r * 10 + d[k % 4] ;
  16.         }
  17.         return r                                                                             ;
  18. }

  19. int main(void)
  20. {
  21.         int c , d[4][20] = {0} , i , j , k , r , put , ans                                   ;
  22.         printf("\n")                                                                         ;
  23.         put = generator()                                                                    ;
  24.         for(r = 0 ; r < 7 ; r ++) {
  25.                 printf("第 %d 次:" , r + 1)                                                 ;
  26.                 scanf("%d", & ans)                                                           ;
  27.                 printf("\n")                                                                 ;
  28.                 if(ans == put) {
  29.                         printf("恭喜你,你猜对了!\n")                                        ;
  30.                         break                                                                ;
  31.                 } else {
  32.                         for(i = 0 , k = put ; i < 4 ; k /= 10 , i ++) d[0][4 - i] = k % 10   ;
  33.                         for(i = 0 , k = ans ; i < 4 ; k /= 10 , i ++) d[1][4 - i] = k % 10   ;
  34.                         for(i = 0 ; i < 4 ; i ++) d[2][i + 1] = 0                            ;
  35.                         for(c = i = 0 ; i < 4 ; i ++) {
  36.                                 if(d[1][i + 1] == d[0][i + 1]) {
  37.                                         d[2][c + 1] = i + 1                                  ;
  38.                                         c ++                                                 ;
  39.                                 }
  40.                         }
  41.                         d[2][0] = c                                                          ;
  42.                         for(i = 0 ; i < 4 ; i ++) d[3][i + 1] = 0                            ;
  43.                         for(c = i = 0 ; i < 4 ; i ++) {
  44.                                 for(j = 0 ; j < 4 ; j ++) {
  45.                                         if(d[0][i + 1] == d[1][j + 1]) {
  46.                                                 d[3][c + 1] = d[0][i + 1]                    ;
  47.                                                 c ++                                         ;
  48.                                                 break                                        ;
  49.                                         }
  50.                                 }
  51.                         }
  52.                         d[3][0] = c                                                          ;
  53.                         if(ans > put) printf("你猜大了.\n")                                  ;
  54.                         else printf("你猜小了.\n")                                           ;
  55.                         if(d[2][0]) {
  56.                                 printf("你猜对了 %d 个位:   %d" , d[2][0] , d[2][1])         ;
  57.                                 for(i = 1 ; i < d[2][0] ; i ++) printf(",%2d" , d[2][i + 1]) ;
  58.                                 printf("\n")                                                 ;
  59.                         } else {
  60.                                 printf("抱歉 : 你没有猜中任何一个位!\n")                    ;
  61.                         }
  62.                         if(d[3][0]) {
  63.                                 printf("你猜对了 %d 个数:   %d" , d[3][0] , d[3][1])         ;
  64.                                 for(i = 1 ; i < d[3][0] ; i ++) printf(",%2d" , d[3][i + 1]) ;
  65.                                 printf("\n\n")                                               ;
  66.                         } else {
  67.                                 printf("抱歉 : 你没有猜中任何一个数!\n\n")                  ;
  68.                         }                        
  69.                 }
  70.         }
  71.         if(r == 7) printf("目标数是 : %d\n" , put)                                           ;
  72. }
复制代码

         编译、运行实况:
  1. D:\[00.Exerciese.2022]\C>g++ -o x x.c

  2. D:\[00.Exerciese.2022]\C>x

  3.         目标数 1022 < x < 9877 , 每个位上的数各不相同。
  4.         你总共有 7 次机会,加油!

  5. 第 1 次:5678

  6. 你猜小了.
  7. 你猜对了 1 个位:   4
  8. 你猜对了 2 个数:   7, 8

  9. 第 2 次:7438

  10. 你猜小了.
  11. 你猜对了 2 个位:   1, 4
  12. 你猜对了 2 个数:   7, 8

  13. 第 3 次:7908

  14. 恭喜你,你猜对了!

  15. D:\[00.Exerciese.2022]\C>

  16. D:\[00.Exerciese.2022]\C>x

  17.         目标数 1022 < x < 9877 , 每个位上的数各不相同。
  18.         你总共有 7 次机会,加油!

  19. 第 1 次:3587

  20. 你猜大了.
  21. 你猜对了 1 个位:   4
  22. 你猜对了 2 个数:   5, 7

  23. 第 2 次:2157

  24. 你猜大了.
  25. 你猜对了 3 个位:   1, 3, 4
  26. 你猜对了 3 个数:   2, 5, 7

  27. 第 3 次:2057

  28. 恭喜你,你猜对了!

  29. D:\[00.Exerciese.2022]\C>
复制代码

        这个游戏很考验智力,玩起来蛮有趣,很适合逗女孩纸。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-10-16 23:12:45 | 显示全部楼层
             7 次就猜对 4 位数?天方夜谭吧!一位数还差不多。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-16 23:30:06 | 显示全部楼层
jackz007 发表于 2022-10-16 23:12
7 次就猜对 4 位数?天方夜谭吧!一位数还差不多。

应该可以把,我们玩过,真的能猜出来,虽然大部分还是要归功于运气,能不能帮我看下代码有什么问题,结果老运行错误,谢谢了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-17 00:59:10 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-17 01:59 编辑
mammm 发表于 2022-10-16 23:30
应该可以把,我们玩过,真的能猜出来,虽然大部分还是要归功于运气,能不能帮我看下代码有什么问题,结果 ...


         先抱歉,实现思路不同,代码我得重写
  1. #include<stdio.h>

  2. int main(void)
  3. {
  4.         int c , d[4][20] = {0} , i , j , k , r , put , ans                                   ;
  5.         printf("\n")                                                                         ;
  6.         printf("请输入一个四位目标靶数 :")                                                  ;
  7.         scanf("%d" , & put)                                                                  ;
  8.         for(r = 0 ; r < 7 ; r ++) {
  9.                 printf("第 %d 次:" , r + 1)                                                 ;
  10.                 scanf("%d", & ans)                                                           ;
  11.                 if(ans == put) {
  12.                         printf("恭喜你,你猜对了!\n")                                        ;
  13.                         break                                                                ;
  14.                 } else {
  15.                         for(i = 0 , k = put ; i < 4 ; k /= 10 , i ++) d[0][4 - i] = k % 10   ;
  16.                         for(i = 0 , k = ans ; i < 4 ; k /= 10 , i ++) d[1][4 - i] = k % 10   ;
  17.                         for(i = 0 ; i < 4 ; i ++) d[2][i + 1] = 0                            ;
  18.                         for(c = i = 0 ; i < 4 ; i ++) {
  19.                                 if(d[1][i + 1] == d[0][i + 1]) {
  20.                                         d[2][c + 1] = i + 1                                  ;
  21.                                         c ++                                                 ;
  22.                                 }
  23.                         }
  24.                         d[2][0] = c                                                          ;
  25.                         for(i = 0 ; i < 4 ; i ++) d[3][i + 1] = 0                            ;
  26.                         for(c = i = 0 ; i < 4 ; i ++) {
  27.                                 for(j = 0 ; j < 4 ; j ++) {
  28.                                         if(d[0][i + 1] == d[1][j + 1]) {
  29.                                                 d[3][c + 1] = d[0][i + 1]                    ;
  30.                                                 c ++                                         ;
  31.                                                 break                                        ;
  32.                                         }
  33.                                 }
  34.                         }
  35.                         d[3][0] = c                                                          ;
  36.                         printf("\n")                                                         ;
  37.                         if(d[2][0]) {
  38.                                 printf("你猜对了 %d 个位:   %d" , d[2][0] , d[2][1])         ;
  39.                                 for(i = 1 ; i < d[2][0] ; i ++) printf(",%2d" , d[2][i + 1]) ;
  40.                                 printf("\n\n")                                               ;
  41.                         } else {
  42.                                 printf("抱歉 : 你没有猜中任何一个位!\n\n")                  ;
  43.                         }
  44.                         if(d[3][0]) {
  45.                                 printf("你猜对了 %d 个数:   %d" , d[3][0] , d[3][1])         ;
  46.                                 for(i = 1 ; i < d[3][0] ; i ++) printf(",%2d" , d[3][i + 1]) ;
  47.                                 printf("\n\n")                                               ;
  48.                         } else {
  49.                                 printf("抱歉 : 你没有猜中任何一个数!\n\n")                  ;
  50.                         }                        
  51.                 }
  52.         }
  53. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-17 09:45:42 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-10-17 10:10 编辑
mammm 发表于 2022-10-16 23:30
应该可以把,我们玩过,真的能猜出来,虽然大部分还是要归功于运气,能不能帮我看下代码有什么问题,结果 ...


        随机数版本
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>

  4. int generator(void)
  5. {
  6.         int d[4] , i , j , k , r , x                                                         ;
  7.         time_t t                                                                             ;
  8.         srand((unsigned) time(& t))                                                          ;
  9.         for(r = 0 ; r < 1000 ;) {
  10.                 for(i = 0 ; i < 4 ;) {
  11.                         x = rand() % 10                                                      ;
  12.                         for(j = 0 ; j < i ; j ++) if(d[j] == x) break                        ;
  13.                         if(j == i) d[i ++] = x                                               ;
  14.                 }
  15.                 for(k = rand() % 10 , i = r = 0 ; i < 4 ; k ++ , i ++) r = r * 10 + d[k % 4] ;
  16.         }
  17.         return r                                                                             ;
  18. }

  19. int main(void)
  20. {
  21.         int c , d[4][20] = {0} , i , j , k , r , put , ans                                   ;
  22.         printf("\n")                                                                         ;
  23.         put = generator()                                                                    ;
  24.         for(r = 0 ; r < 7 ; r ++) {
  25.                 printf("第 %d 次:" , r + 1)                                                 ;
  26.                 scanf("%d", & ans)                                                           ;
  27.                 printf("\n")                                                                 ;
  28.                 if(ans == put) {
  29.                         printf("恭喜你,你猜对了!\n")                                        ;
  30.                         break                                                                ;
  31.                 } else {
  32.                         for(i = 0 , k = put ; i < 4 ; k /= 10 , i ++) d[0][4 - i] = k % 10   ;
  33.                         for(i = 0 , k = ans ; i < 4 ; k /= 10 , i ++) d[1][4 - i] = k % 10   ;
  34.                         for(i = 0 ; i < 4 ; i ++) d[2][i + 1] = 0                            ;
  35.                         for(c = i = 0 ; i < 4 ; i ++) {
  36.                                 if(d[1][i + 1] == d[0][i + 1]) {
  37.                                         d[2][c + 1] = i + 1                                  ;
  38.                                         c ++                                                 ;
  39.                                 }
  40.                         }
  41.                         d[2][0] = c                                                          ;
  42.                         for(i = 0 ; i < 4 ; i ++) d[3][i + 1] = 0                            ;
  43.                         for(c = i = 0 ; i < 4 ; i ++) {
  44.                                 for(j = 0 ; j < 4 ; j ++) {
  45.                                         if(d[0][i + 1] == d[1][j + 1]) {
  46.                                                 d[3][c + 1] = d[0][i + 1]                    ;
  47.                                                 c ++                                         ;
  48.                                                 break                                        ;
  49.                                         }
  50.                                 }
  51.                         }
  52.                         d[3][0] = c                                                          ;
  53.                         if(ans > put) printf("你猜大了.\n")                                  ;
  54.                         else printf("你猜小了.\n")                                           ;
  55.                         if(d[2][0]) {
  56.                                 printf("你猜对了 %d 个位:   %d" , d[2][0] , d[2][1])         ;
  57.                                 for(i = 1 ; i < d[2][0] ; i ++) printf(",%2d" , d[2][i + 1]) ;
  58.                                 printf("\n")                                                 ;
  59.                         } else {
  60.                                 printf("抱歉 : 你没有猜中任何一个位!\n")                    ;
  61.                         }
  62.                         if(d[3][0]) {
  63.                                 printf("你猜对了 %d 个数:   %d" , d[3][0] , d[3][1])         ;
  64.                                 for(i = 1 ; i < d[3][0] ; i ++) printf(",%2d" , d[3][i + 1]) ;
  65.                                 printf("\n\n")                                               ;
  66.                         } else {
  67.                                 printf("抱歉 : 你没有猜中任何一个数!\n\n")                  ;
  68.                         }                        
  69.                 }
  70.         }
  71.         if(r == 7) printf("目标数是 : %d\n" , put)                                           ;
  72. }
复制代码

         编译、运行实况:
  1. D:\[00.Exerciese.2022]\C>g++ -o x x.c

  2. D:\[00.Exerciese.2022]\C>x

  3.         目标数 1022 < x < 9877 , 每个位上的数各不相同。
  4.         你总共有 7 次机会,加油!

  5. 第 1 次:5678

  6. 你猜小了.
  7. 你猜对了 1 个位:   4
  8. 你猜对了 2 个数:   7, 8

  9. 第 2 次:7438

  10. 你猜小了.
  11. 你猜对了 2 个位:   1, 4
  12. 你猜对了 2 个数:   7, 8

  13. 第 3 次:7908

  14. 恭喜你,你猜对了!

  15. D:\[00.Exerciese.2022]\C>

  16. D:\[00.Exerciese.2022]\C>x

  17.         目标数 1022 < x < 9877 , 每个位上的数各不相同。
  18.         你总共有 7 次机会,加油!

  19. 第 1 次:3587

  20. 你猜大了.
  21. 你猜对了 1 个位:   4
  22. 你猜对了 2 个数:   5, 7

  23. 第 2 次:2157

  24. 你猜大了.
  25. 你猜对了 3 个位:   1, 3, 4
  26. 你猜对了 3 个数:   2, 5, 7

  27. 第 3 次:2057

  28. 恭喜你,你猜对了!

  29. D:\[00.Exerciese.2022]\C>
复制代码

        这个游戏很考验智力,玩起来蛮有趣,很适合逗女孩纸。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-17 11:44:05 | 显示全部楼层
jackz007 发表于 2022-10-17 09:45
随机数版本

         编译、运行实况:

高级,感谢感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 02:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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