| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2798 人关注过本帖
标题:关于猜数字游戏,有点bug求解决
只看楼主 加入收藏
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:12 
关于猜数字游戏,有点bug求解决
游戏规则:模拟文曲星上的猜数游戏,先由计算机随机生成一个各位相异的4位数字,由用户来猜,每次猜测四个数字(包括了顺序),根据用户猜测的结果给出提示:xAyB
其中,A前面的数字表示有几位数字不仅数字猜对了,而且位置也正确,B前面的数字表示有几位数字猜对了,但是位置不正确。
    int randomNumber[4], guessNumber[4];
    srand((unsigned)time(NULL));
    again:for(int i = 0; i < 4; i++)
    {
        randomNumber[i] = rand() % 10;
        echo(randomNumber,i);
    }
    int count = 0;
    for(int i = 0; i < 4; i++)
    {
        cout << randomNumber[i];
    }
    while(count <= 20)
    {
        cout << "Please enter an number : ";
        int InputNumber;
        cin >> InputNumber;
        for(int i = 0; i <= 3; i++)
        {
            guessNumber[i] = InputNumber % 10;
            InputNumber = InputNumber / 10;
        }
        int A = 0, B = 0;
        for(int i = 0; i < 4; i++)
        {
            for(int j = 0; j < i; j++)
            {
                if(guessNumber[j] == randomNumber[i]) B++;
            }
        }
        for(int i = 0; i < 4; i++)
        {
            if(guessNumber[i] == randomNumber[i]) A++;
        }

        if(A == 4){
            cout << "Congrations!" << endl;
            break;
        }
        else{
            count++;
            cout << A << "A" << B << "B" <<endl;
        }
    }
    char Input;
    cout << "Do you want to play again?(Y/N) : ";
    cin >> Input;
    if(Input == 'Y') goto again;
    else exit(0);
}
void echo(int *randomNumber, int n)    //检测数字是否重复
{
    for(int i = 0; i < n; i++)
    {
        if(randomNumber[i] == randomNumber[n])
        {
            randomNumber[n] = rand() % 10;
            echo(randomNumber,n);
        }
    }
}

应该是红色部分有错误吧
具体要怎么改进呢。。真是让人摸不着头脑

[此贴子已经被作者于2017-3-12 15:58编辑过]

搜索更多相关主题的帖子: 文曲星 计算机 count 游戏 而且 
2017-03-12 15:54
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2017-03-12 15:54
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2017-03-12 15:59
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
A是否表示位置相同数值相同,B是否表示位置不同数值相同?
2017-03-12 16:00
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:7 
int A = 0, B = 0;
         for(int i = 0; i < 4; i++)
         {
             for(int j = 0; j < 4; j++)
             {
                 if(guessNumber[j] == randomNumber[i]&&i!=j) B++;
                 else if(guessNumber[j] == randomNumber[i]&&i==j) A++;

             }
         }
       这样呢?   
2017-03-12 16:15
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
收藏
得分:0 
回复 5楼 ehszt
图片附件: 游客没有浏览图片的权限,请 登录注册

还是有点问题
2017-03-12 16:26
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:3 
PS:突然发现没有对相同数字的重复性进行处理~

[此贴子已经被作者于2017-3-12 16:30编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-12 16:28
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 7楼 九转星河
例如如果输入6666~就会有问题~

应该是先判断A是否成立~
A得按位比较~一个for循环比较4次就可以了~

然后再把选对的数字下标做个标记~接下来再对没有标记的数字进行比较~
并且有一个地方要小心~当求B时发现数字成立时立即做个标记并break退出循环以免重复计算~

[此贴子已经被作者于2017-3-12 16:47编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-12 16:35
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 8楼 九转星河
思路停不下来~

继续接~求完A并做标记后

可以另外开两个数组空间大小为10的数组~每个数组负责统计该数字的个数~

再算出猜数字重复的个数a和被猜数字重复的个数b(没有重复的数字标记为1)~

再用a<=b?a:b就行了~
最后相加求和~


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-12 16:45
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
我又改了一个地方,就是数字输入处理部分,应该用i=3,i--。不然猜的是倒序。
输入重复数字是没关系的,因为产生的四位数不重复。
#include <iostream>
 #include <stdlib.h>
 #include <time.h>
 using namespace std;
  void echo(int *randomNumber, int n) ;
 main()
 {
 
 int randomNumber[4], guessNumber[4];
     srand((unsigned)time(NULL));
     again:for(int i = 0; i < 4; i++)
     {
         randomNumber[i] = rand() % 10;
         echo(randomNumber,i);
     }
     int count = 0;
     for(int i = 0; i < 4; i++)            //这是为了验证用,可删除
     {
         cout << randomNumber[i];
     }
     cout<<endl;
     while(count <= 20)
     {
         cout << "Please enter an number : ";
         int InputNumber;
         cin >> InputNumber;
         for(int i = 3; i >= 0; i--)
         {
             guessNumber[i] = InputNumber % 10;
             InputNumber = InputNumber / 10;
         }
        int A = 0, B = 0;
          for(int i = 0; i < 4; i++)
          {
              for(int j = 0; j < 4; j++)
              {
                  if(guessNumber[j] == randomNumber[i]&&i!=j) B++;
                  else if(guessNumber[j] == randomNumber[i]&&i==j) A++;

              }
          }
         if(A == 4){
             cout << "Congrations!" << endl;
             break;
         }
         else{
             count++;
             cout << A << "A" << B << "B" <<endl;
         }
     }
     char Input;
     cout << "Do you want to play again?(Y/N) : ";
     cin >> Input;
     if(Input == 'Y') goto again;
     else exit(0);
 }
 void echo(int *randomNumber, int n)    //检测数字是否重复
{
     for(int i = 0; i < n; i++)
     {
         if(randomNumber[i] == randomNumber[n])
         {
             randomNumber[n] = rand() % 10;
             echo(randomNumber,n);
         }
     }
 }
 

[此贴子已经被作者于2017-3-12 16:52编辑过]

2017-03-12 16:49
快速回复:关于猜数字游戏,有点bug求解决
数据加载中...
 
   



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

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