我正在处理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.";
}
}
}
}
}
}
}
我觉得这很糟糕,因为我只有一个流程图路径,而且这个程序已经很长了。有没有更有效的方法来做到这一点?
答案 0 :(得分:1)
基本上,根据用户的说法,你要么删除一半,要么增加你之前猜到的数字的一半。如果你要求循环输入,你可以简单地每次添加或删除一半的数字,询问新的数字。
所以基本上,不是对每个问题进行硬编码,而是每次都问同一个问题,但是在循环中使用最后一个数字/ 2或+(/ 2)。
我假设你真的不希望我们为你编写代码,所以我不会。我相信你能用这个线索搞清楚!检查/ while循环,因为您需要执行此操作。