| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1939 人关注过本帖
标题:猜数字游戏问题
取消只看楼主 加入收藏
wuxiami
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2022-7-17
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
猜数字游戏问题

#include<stdio.h>

void main()
{


    int x;                            //随机生成数
    int n = 0;                           //输入的数
    int s = 0;                       //输入次数
    int a;                           //完全符合
    int b;                           //放置错误
    int g1, s1, b1, q1;              //n的各个数位
    int g2, s2, b2, q2;              //x的各个数位
    srand(time(0));                  //让随机生成数不重复
    x = rand() % 9999;
    for (;;)
    {
        printf("输入四位数字");
        scanf_s("%d", &n);

        g2 = x % 10;
        s2 = x / 10 % 10;
        b2 = x / 100 % 10;
        q2 = x / 1000;

        //输入
        int y = 0;       //while循环数字




        a = 0;                        //初始化
        b = 0;                          //初始化
        if (n == x)                    //猜的数字和生成随机数一样

        {
            printf("恭喜!经过%d次尝试,您答对了!\n", s);
            break;// exit(0);                                       //结束循环
        }
        else {//不一样的话  直接拆位
            g1 = n % 10;
            s1 = n / 10 % 10;
            b1 = n / 100 % 10;
            q1 = n / 1000;

            if (g1 == g2)    a++;
            if (s1 == s2)    a++;
            if (b1 == b2)    a++;
            if (q1 == q2)    a++;

            if (g1 == s2 || g1 == b2 || g1 == q2)    b++;
            if (s1 == g2 || s1 == b2 || s1 == q2)    b++;
            if (b1 == g2 || b1 == s2 || b1 == q2)    b++;
            if (q1 == g2 || q1 == s2 || q1 == b2)    b++;

            printf("有%d个数字完全符合,有%d个数字位置错误\n", a, b);
            s++;//次数增加
        }
    }
}



大佬们,一个猜数字的游戏,数字为4位,用户输入后,计算机进行判断,如果猜测的不正确,计算机要告诉用户,用户猜
      的数字,其中有几个数字的数值和位置是和正确的数字是一样的,有几个数字的数值和正确的数字一样,但是位置不
      一样。
      如正确的数字为7258
      用户输入1349的时候,计算机弹出提示:有0个数字完全符合,有0个数字位置错误
      用户输入1347的时候,计算机弹出提示:有0个数字完全符合,有1个数字位置错误
      用户输入7081的时候,计算机弹出提示:有1个数字完全符合,有1个数字位置错误
      用户输入2222的时候,计算机弹出提示:有1个数字完全符合,有3个数字位置错误
      用户输入8275的时候,计算机弹出提示:有1个数字完全符合,有3个数字位置错误
      用户输入7258的时候,计算机弹出提示:恭喜!经过6次尝试,您答对了!

vs2019下C语言

现在程序大部分情况可以正常运行  但是会发生这种情况:
输入四位数字0000
有0个数字完全符合,有0个数字位置错误
输入四位数字1111
有0个数字完全符合,有0个数字位置错误
输入四位数字2222
有0个数字完全符合,有0个数字位置错误
输入四位数字3333
有1个数字完全符合,有3个数字位置错误
输入四位数字4444
有0个数字完全符合,有0个数字位置错误
输入四位数字5555
有0个数字完全符合,有0个数字位置错误
输入四位数字6666
有1个数字完全符合,有3个数字位置错误
输入四位数字7777
有0个数字完全符合,有0个数字位置错误
输入四位数字8888
有2个数字完全符合,有4个数字位置错误
输入四位数字3688
有2个数字完全符合,有3个数字位置错误
输入四位数字

最后一个提示2完全符合   3位置错误
醉了
搜索更多相关主题的帖子: 位置 数字 错误 位数 输入 
2022-08-25 11:50
wuxiami
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2022-7-17
收藏
得分:0 
回复 2楼 chenyucheng
对的
2022-08-25 14:53
wuxiami
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2022-7-17
收藏
得分:0 
回复 4楼 rjsp
我那个例子输入应该提示2个完全正确2个位置错误,就是完全正确的数字和位置错误的数字加起来最多为4

[此贴子已经被作者于2022-8-25 16:08编辑过]

2022-08-25 16:01
wuxiami
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2022-7-17
收藏
得分:0 
如 rand生成的正确的数字为7258
      用户输入1349的时候,计算机弹出提示:有0个数字完全符合,有0个数字位置错误
      用户输入1347的时候,计算机弹出提示:有0个数字完全符合,有1个数字位置错误
      用户输入7081的时候,计算机弹出提示:有1个数字完全符合,有1个数字位置错误
      用户输入2222的时候,计算机弹出提示:有1个数字完全符合,有3个数字位置错误
      用户输入8275的时候,计算机弹出提示:有1个数字完全符合,有3个数字位置错误
      用户输入7258的时候,计算机弹出提示:恭喜!经过6次尝试,您答对了!



但是有时候 提示完全符合和位置错误加起来是5

[此贴子已经被作者于2022-8-25 17:57编辑过]

2022-08-25 16:48
wuxiami
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2022-7-17
收藏
得分:0 
n是输入的四位数字  x是rand随机生成的四位答案

[此贴子已经被作者于2022-8-25 18:06编辑过]

2022-08-25 17:58
wuxiami
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2022-7-17
收藏
得分:0 
回复 10楼 rjsp
这会又搞出来一个绝对的问题  根据我实验  推出答案是7087
但是输入0700输出一个0正确4位置错误

输入四位数字0000
有1个数字完全符合,有3个数字位置错误         这一句推出有1个0
输入四位数字1111
有0个数字完全符合,有0个数字位置错误
输入四位数字2222
有0个数字完全符合,有0个数字位置错误
输入四位数字333
有0个数字完全符合,有1个数字位置错误
输入四位数字3333
有0个数字完全符合,有0个数字位置错误
输入四位数字4444
有0个数字完全符合,有0个数字位置错误
输入四位数字5555
有0个数字完全符合,有0个数字位置错误
输入四位数字6666
有0个数字完全符合,有0个数字位置错误        
输入四位数字7777
有2个数字完全符合,有2个数字位置错误           这一句退出两个7
输入四位数字8888
有1个数字完全符合,有3个数字位置错误        这一句退出1个8     得出四个数字为0778  但是不知道顺序  继续排查
输入四位数字0778
有0个数字完全符合,有4个数字位置错误
输入四位数字7708
有1个数字完全符合,有3个数字位置错误
输入四位数字8077
有2个数字完全符合,有2个数字位置错误
输入四位数字0111
有0个数字完全符合,有1个数字位置错误
输入四位数字1011
有1个数字完全符合,有0个数字位置错误
输入四位数字1101
有0个数字完全符合,有1个数字位置错误
输入四位数字1110
有0个数字完全符合,有1个数字位置错误
输入四位数字7666
有1个数字完全符合,有1个数字位置错误
输入四位数字6667
有1个数字完全符合,有1个数字位置错误
输入四位数字0700
有0个数字完全符合,有4个数字位置错误            这一句什么情况??明显有问题了
输入四位数字



[此贴子已经被作者于2022-8-25 21:00编辑过]

2022-08-25 20:51
wuxiami
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2022-7-17
收藏
得分:0 
回复 11楼 wuxiami
有2个数字完全符合,有4个数字位置错误
输入四位数字1111
有0个数字完全符合,有0个数字位置错误
输入四位数字2222
有0个数字完全符合,有0个数字位置错误
输入四位数字3333
有0个数字完全符合,有0个数字位置错误
输入四位数字4444
有0个数字完全符合,有0个数字位置错误
输入四位数字5555
有1个数字完全符合,有3个数字位置错误
输入四位数字6666
有1个数字完全符合,有3个数字位置错误
输入四位数字0056
有1个数字完全符合,有4个数字位置错误
输入四位数字0011
有1个数字完全符合,有2个数字位置错误
输入四位数字1001
有1个数字完全符合,有2个数字位置错误
输入四位数字1100
有1个数字完全符合,有2个数字位置错误
输入四位数字1010
有0个数字完全符合,有2个数字位置错误
输入四位数字0101
有2个数字完全符合,有2个数字位置错误
输入四位数字0501
有2个数字完全符合,有3个数字位置错误
输入四位数字0105
有3个数字完全符合,有2个数字位置错误
输入四位数字0606
有3个数字完全符合,有3个数字位置错误
输入四位数字0506
有2个数字完全符合,有4个数字位置错误              这句  
输入四位数字0605
恭喜!经过17次尝试,您答对了!
2022-08-25 21:16
wuxiami
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2022-7-17
收藏
得分:0 
有没有更好的逻辑,能让这种情况下提示2个数字位置错误
2022-08-26 09:01
wuxiami
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2022-7-17
收藏
得分:0 
回复 10楼 rjsp
#include <stdio.h>  
 
int main()
{

    int x;     //随机生成数
    int n = 0; //输入的数
    int s = 0; //输入次数
    int a;     //完全符合
    int b;     //位置错误
    int n4[4]; // n的各个数位
    int x4[4]; // x的各个数位
    int flag[4] = { 0 };
    srand(time(0)); //让随机生成数不重复
    x = rand() % 9999;
    for (;;)
    {
        
        printf("输入四位数字:");
        scanf_s("%d", &n);
        s++; //输入次数增加

        x4[0] = x % 10;
        x4[1] = x / 10 % 10;
        x4[2] = x / 100 % 10;
        x4[3] = x / 1000;

        a = 0; //初始化
        b = 0; //初始化

        for (int i = 0; i < 4; i++)
            flag[i] = -1;
        if (n == x) //猜的数字和生成随机数一样

        {
            printf("恭喜!经过%d次尝试,您答对了!\n", s);
            break; // exit(0);                                       //结束循环
        }
        else
        { //不一样的话  直接拆位
            n4[0] = n % 10;
            n4[1] = n / 10 % 10;
            n4[2] = n / 100 % 10;
            n4[3] = n / 1000;

            for (int i = 0; i < 4; i++) //遍历x的四位数
            {
                for (int j = 0; j < 4; j++) // 遍历n的四位数
                {
                    if (x4[i] == n4[j]) //数字相等
                    {
                        if (i == j) //位置相同,
                        {
                            a++;
                            if (flag[j] != -1) //如果该位置被占用,则 b--,
                                b--;
                            flag[j] = i; //设置位置标记
                        }
                        else if (flag[j] == -1) // 位置不同
                        {
                            b++;
                            flag[j] = i;
                        }
                    }
                }
            }

            printf("有%d个数字完全符合,有%d个数字位置错误\n", a, b);
        }
    }
}

大佬们酱紫  可以实现 哎 搞的头大
2022-08-28 21:24
快速回复:猜数字游戏问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.182070 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved