mammm 发表于 2022-10-16 22:47:31

大佬求助!!!!,一个小游戏

给定一个四位数,用户猜这个数字,可以猜七次,每猜一次,系统给出对了几个数字,还有对了几个数字的位置,比如一个数字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);

        }



}

jackz007 发表于 2022-10-16 23:12:45

             7 次就猜对 4 位数?天方夜谭吧!一位数还差不多。

mammm 发表于 2022-10-16 23:30:06

jackz007 发表于 2022-10-16 23:12
7 次就猜对 4 位数?天方夜谭吧!一位数还差不多。

应该可以把,我们玩过,真的能猜出来,虽然大部分还是要归功于运气,能不能帮我看下代码有什么问题,结果老运行错误,谢谢了{:5_96:}

jackz007 发表于 2022-10-17 00:59:10

本帖最后由 jackz007 于 2022-10-17 01:59 编辑

mammm 发表于 2022-10-16 23:30
应该可以把,我们玩过,真的能猜出来,虽然大部分还是要归功于运气,能不能帮我看下代码有什么问题,结果 ...

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

int main(void)
{
      int c , d = {0} , i , j , k , r , put , ans                                 ;
      printf("\n")                                                                         ;
      printf("请输入一个四位目标靶数 :")                                                ;
      scanf("%d" , & put)                                                                  ;
      for(r = 0 ; r < 7 ; r ++) {
                printf("第 %d 次:" , r + 1)                                                 ;
                scanf("%d", & ans)                                                         ;
                if(ans == put) {
                        printf("恭喜你,你猜对了!\n")                                        ;
                        break                                                                ;
                } else {
                        for(i = 0 , k = put ; i < 4 ; k /= 10 , i ++) d = k % 10   ;
                        for(i = 0 , k = ans ; i < 4 ; k /= 10 , i ++) d = k % 10   ;
                        for(i = 0 ; i < 4 ; i ++) d = 0                            ;
                        for(c = i = 0 ; i < 4 ; i ++) {
                              if(d == d) {
                                        d = i + 1                                  ;
                                        c ++                                                 ;
                              }
                        }
                        d = c                                                          ;
                        for(i = 0 ; i < 4 ; i ++) d = 0                            ;
                        for(c = i = 0 ; i < 4 ; i ++) {
                              for(j = 0 ; j < 4 ; j ++) {
                                        if(d == d) {
                                                d = d                  ;
                                                c ++                                       ;
                                                break                                        ;
                                        }
                              }
                        }
                        d = c                                                          ;
                        printf("\n")                                                         ;
                        if(d) {
                              printf("你猜对了 %d 个位:   %d" , d , d)         ;
                              for(i = 1 ; i < d ; i ++) printf(",%2d" , d) ;
                              printf("\n\n")                                             ;
                        } else {
                              printf("抱歉 : 你没有猜中任何一个位!\n\n")                  ;
                        }
                        if(d) {
                              printf("你猜对了 %d 个数:   %d" , d , d)         ;
                              for(i = 1 ; i < d ; i ++) printf(",%2d" , d) ;
                              printf("\n\n")                                             ;
                        } else {
                              printf("抱歉 : 你没有猜中任何一个数!\n\n")                  ;
                        }                        
                }
      }
}

jackz007 发表于 2022-10-17 09:45:42

本帖最后由 jackz007 于 2022-10-17 10:10 编辑

mammm 发表于 2022-10-16 23:30
应该可以把,我们玩过,真的能猜出来,虽然大部分还是要归功于运气,能不能帮我看下代码有什么问题,结果 ...

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

int generator(void)
{
      int d , i , j , k , r , x                                                         ;
      time_t t                                                                           ;
      srand((unsigned) time(& t))                                                          ;
      for(r = 0 ; r < 1000 ;) {
                for(i = 0 ; i < 4 ;) {
                        x = rand() % 10                                                      ;
                        for(j = 0 ; j < i ; j ++) if(d == x) break                        ;
                        if(j == i) d = x                                             ;
                }
                for(k = rand() % 10 , i = r = 0 ; i < 4 ; k ++ , i ++) r = r * 10 + d ;
      }
      return r                                                                           ;
}

int main(void)
{
      int c , d = {0} , i , j , k , r , put , ans                                 ;
      printf("\n")                                                                         ;
      put = generator()                                                                  ;
      for(r = 0 ; r < 7 ; r ++) {
                printf("第 %d 次:" , r + 1)                                                 ;
                scanf("%d", & ans)                                                         ;
                printf("\n")                                                               ;
                if(ans == put) {
                        printf("恭喜你,你猜对了!\n")                                        ;
                        break                                                                ;
                } else {
                        for(i = 0 , k = put ; i < 4 ; k /= 10 , i ++) d = k % 10   ;
                        for(i = 0 , k = ans ; i < 4 ; k /= 10 , i ++) d = k % 10   ;
                        for(i = 0 ; i < 4 ; i ++) d = 0                            ;
                        for(c = i = 0 ; i < 4 ; i ++) {
                              if(d == d) {
                                        d = i + 1                                  ;
                                        c ++                                                 ;
                              }
                        }
                        d = c                                                          ;
                        for(i = 0 ; i < 4 ; i ++) d = 0                            ;
                        for(c = i = 0 ; i < 4 ; i ++) {
                              for(j = 0 ; j < 4 ; j ++) {
                                        if(d == d) {
                                                d = d                  ;
                                                c ++                                       ;
                                                break                                        ;
                                        }
                              }
                        }
                        d = c                                                          ;
                        if(ans > put) printf("你猜大了.\n")                                  ;
                        else printf("你猜小了.\n")                                           ;
                        if(d) {
                              printf("你猜对了 %d 个位:   %d" , d , d)         ;
                              for(i = 1 ; i < d ; i ++) printf(",%2d" , d) ;
                              printf("\n")                                                 ;
                        } else {
                              printf("抱歉 : 你没有猜中任何一个位!\n")                  ;
                        }
                        if(d) {
                              printf("你猜对了 %d 个数:   %d" , d , d)         ;
                              for(i = 1 ; i < d ; i ++) printf(",%2d" , d) ;
                              printf("\n\n")                                             ;
                        } else {
                              printf("抱歉 : 你没有猜中任何一个数!\n\n")                  ;
                        }                        
                }
      }
      if(r == 7) printf("目标数是 : %d\n" , put)                                           ;
}
         编译、运行实况:
D:\\C>g++ -o x x.c

D:\\C>x

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

第 1 次:5678

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

第 2 次:7438

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

第 3 次:7908

恭喜你,你猜对了!

D:\\C>

D:\\C>x

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

第 1 次:3587

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

第 2 次:2157

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

第 3 次:2057

恭喜你,你猜对了!

D:\\C>
      这个游戏很考验智力,玩起来蛮有趣,很适合逗女孩纸。

mammm 发表于 2022-10-17 11:44:05

jackz007 发表于 2022-10-17 09:45
随机数版本

         编译、运行实况:


高级,感谢{:5_95:}感谢
页: [1]
查看完整版本: 大佬求助!!!!,一个小游戏