c ++程序找到猜谜游戏的解决方案

时间:2017-09-17 05:22:55

标签: c++ random

我正在阅读一本名为“跳入c ++”的书,其中我希望我建立一个程序,找到一个猜测游戏的解决方案,随机选择1到100之间的数字,让用户猜出这个数字是什么并告诉他们他们的猜测是高,低还是恰到好处。 基本上它需要我预测下一个随机数,但由于我是新手,我无法找到一种方法。

这是猜谜游戏的代码:

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int x,y;
int rand_range(int low, int high)
{
  return rand() % (high - low) + low;
}

int main()
{
  int seed = time(NULL);
  srand(seed);
  int y = rand_range(1, 100);
  cout << "Program has picked a no. between 1 to 100... You just make a 
           guess....\n";
  cin >> x;
  while(1)
    {
      if(x == y)
       {
          cout << "just right\n";return 0;
       }
      else if(x < y)
       { 
         cout << "low\n";return 0;
       }
      else
       {
         cout << "high\n";return 0;
       }
   }
}

该程序让用户猜测1到100之间的数字,然后检查猜测是低,高还是恰到好处但是我需要一个解决上述猜测问题的程序并猜测随机数。究竟。 意味着我需要一种方法来预测下一个伪随机数。

2 个答案:

答案 0 :(得分:1)

您的代码存在一些基本错误。首先,您需要在循环中获取输入。其次,你在所有条件下返回。这就是为什么您的代码只尝试匹配目标一次的原因。而且你必须在循环中输入输入,因为你想尝试猜测数字。为此,您每次都必须输入。我稍微编辑了你的代码。请检查以下代码 -

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int x,y;
int rand_range(int low, int high)
{
  return rand() % (high - low) + low;
}

int main()
{
  int seed = time(NULL);
  srand(seed);
  int y = rand_range(1, 100);
  cout << "Program has picked a no. between 1 to 100... You just make a guess....\n";

  while(1)
    {
    cin >> x; // Now taking input in the loop
      if(x == y)
       {
          cout << "just right\n";return 0;
       }
      else if(x < y)
       { 
         cout << "low\n"; //omitted the return line
       }
      else
       {
         cout << "high\n"; // omitted the return line
       }
   }
}

要猜测下一个伪随机数,您必须假设一个确定性算法。对于一个新手而言,这个问题太过宽泛,太难了。请参阅此帖子 - Is it possible to predict the next number in a number generator?

答案 1 :(得分:-2)

我已经编辑了你的代码。你把代码放在一个无限循环中,但是你为每个可能的情况退出了循环,所以没有一个有效的点。相反,一旦用户猜出正确的输入,你应该有一个循环结束。

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int x,y;
int rand_range(int low, int high)
{
    return rand() % (high - low) + low;
}

int main()
{
    int seed = time(NULL);
    srand(seed);
    int y = rand_range(1, 100);
    cout << "Program has picked a no. between 1 to 100... "
         << "You just make a guess....\n";
    cin >> x;
    while(x != y) {
        if(x < y)
           cout << "low\n";

        else
           cout << "high\n";

        cin >> x;
    }

    cout << "just right\n";
    return 0;

}