通过提问来猜测游戏:效率

时间:2012-10-06 20:27:53

标签: if-statement binary-tree performance

我正在处理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.";
                        }
                    }
                }
            }
        }
}
}

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

1 个答案:

答案 0 :(得分:1)

基本上,根据用户的说法,你要么删除一半,要么增加你之前猜到的数字的一半。如果你要求循环输入,你可以简单地每次添加或删除一半的数字,询问新的数字。

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

我假设你真的不希望我们为你编写代码,所以我不会。我相信你能用这个线索搞清楚!检查/ while循环,因为您需要执行此操作。