【问题标题】:Guessing game by asking questions: efficiency通过提问猜谜游戏:效率
【发布时间】:2014-07-18 02:44:38
【问题描述】:

我正在处理 Stroustrup 书中的一个练习,我必须设计一个程序来猜测用户通过提问来思考的 1-100 之间的数字,即“它是否小于 50?”等等。我最多只能问 7 个问题才能得到答案。

到目前为止,我有这样的事情:

string answer;

cout << "Think of a number between 1 and 100.\n";

cout << "Is it even or odd? (E/O)\n";

cin >> answer;

if (answer == "E") 
{
    cout << "Is it less than 50? (Y/N)\n";
    cin >> answer; 
    if (answer == "Y")
    {
        cout << "Is it less than 25? (Y/N)\n";
        cin >> answer;
        if (answer == "Y")
        {
            cout << "Is it less than 15? (Y/N)\n";
            cin >> answer;
            if (answer == "Y")
            {
                cout << "Is it less than 9? (Y/N)\n";
                cin >> answer;
                if (answer == "Y")
                {
                    cout << "Is it less than 5? (Y/N)\n";
                    cin >> answer;
                    if (answer == "Y")
                    {
                        cout << "Is it less than 3? (Y/N)\n";
                        cin >> answer;
                        if (answer == "Y") 
                        {
                            cout << "Your number is 2.";
                        }
                    }
                }
            }
        }
}
}

我觉得这真的很糟糕,因为我只有一个流程图的路径,而且这个程序已经很长了。有没有更有效的方法来做到这一点?

【问题讨论】:

  • 我选99.....程序结束。
  • 就像我说的我还没有完成它......它只是树的 1 条路径

标签: if-statement binary-tree performance


【解决方案1】:

基本上,您希望根据用户所说的话,将您之前猜到的数字减半或加半。如果您在循环中要求输入,您可以简单地每次添加或删除一半的数字,询问新的数字。

因此,基本上,您不必对每个问题进行硬编码,而是每次都问同一个问题,但在循环中使用最后一个数字 / 2 或 + (/2)。

我假设您并不真的希望我们为您编写代码,所以我不会。相信有了这个线索,你就可以猜到了!查看 for/while 循环,因为您需要它们来执行此操作。

【讨论】:

  • 感谢您的回复,您能否澄清删除一半/添加一半的意思?您是指在每次问到之前问的中间问题时只问“它是否小于--”之类的问题来质疑用户?
猜你喜欢
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多