我有一个编写一个猜测我的号码的程序的作业,但我必须在没有数字输入的情况下这样做。只有y / n问题。到目前为止我的代码在这里,但它不能正常工作。例如,它无法猜测24,50和75的数字。它可以通过数字输入正常运行,但如果没有它就无法弄清楚如何去做,所以请给我一些提示:)
#include <iostream>
using namespace std;
int main()
{
cout << "Think of a number 1-100!!\n";
bool l=false;
int min=0;
int max=100;
int ind;
int h;
char answer;
int tries=0;
do
{
ind=(min+max)/2;
cout << "Is your number bigger than " << ind << "? (y/n): "; cin >> answer;
if(answer=='y')
{
h=ind+(ind/2);
}
else
{
h=ind-(ind/2);
}
tries++;
if(ind>h)
{
max=ind-1;
//cout << "ind: " << ind << endl;
//cout << "h: " << h << endl;
}
else if(ind<h)
{
min=ind+1;
//cout << "ind: " << ind << endl;
//cout << "h: " << h << endl;
}
else if(ind=h)
{
l=true;
//cout << "ind: " << ind << endl;
//cout << "h: " << h << endl;
cout << h << " is your number!\nWow I guessed it in " << tries << " tries!\nPat me!";
}
}while(!l && min<=max);
return 0;
}
答案 0 :(得分:3)
如果第一次迭代为50,则ind
为50.然后你问这个数字是否大于50,答案是否定的。在这种情况下,您将h
计算为ind-(ind/2)
为25,然后将其与ind
进行比较并将max
设置为49,然后继续循环。但这是不正确的,因为在这种情况下,您通过将max
设置为49来丢弃正确的答案50。
答案 1 :(得分:2)
我在if语句(=)中看到了一个赋值。应该是一个等于令牌(==)。
答案 2 :(得分:1)
现在我已经阅读了你的代码,几乎是有意义的。但是你对h
的使用是错误的。这是一个总结。当用户的号码为50,并且ind
为50时,请在第一个转弯处考虑此代码。
cin >> answer;
if(answer=='y')
h=ind+(ind/2);
else
h=ind-(ind/2);
if(ind=h)
cout << h << " is your number!\nWow I guessed it in " << tries << " tries!\nPat me!";
答案 3 :(得分:0)
很容易制作猜测码,但另一方面,如果他问你50次从0开始你的数字是50,那就太无聊了,所以让它变得更有趣的一方面就是制作一个变量用于跳跃,但记录Max&amp; Min非常重要,您也可以通过跳跃方差添加机器学习来使其变得智能化