我试图制作猜谜游戏程序,其中用户认为1到100之间的数字,然后计算机随机生成(猜测)1到100之间的数字。然后用户告诉计算机是否它们的数量比猜测的数字更高( H ),更低( L )或相同( Y )。我遇到的问题是改变计算机产生猜测的范围。
所以,让我们说我的号码 43 ,计算机生成 15 作为猜测。我会输入 H ,表示我的号码高于猜测值。然后,计算机会更改参数以生成 16 和 100 之间的数字。
int high = 100, low = 1;
char answer;
设置我的变量。
srand(time(0));
我要让这一代真正随机化。
int guess = rand() % high + low;
cout << "Is your number " << guess << "?\n";
cin >> answer;
生成号码,询问我是否正在思考这个号码,然后让我回答它是否更高,更低或更正。
然后检查答案的段并确定如何更改随机生成的数字的范围。
switch (answer)
{
case 'H':
low = (guess + 1);
high = (high - guess);
break;
case 'L':
high = guess;
break;
default:
break;
}
我想我不理解的是rand()是如何真正起作用的。就像我理解整个
rand() % 100 //range of 0 and 99
rand() % 100 + 1 // range of 1 and 100
但我想知道如何更改参数以便我得到
rand() % max + min // range of min and max
我不断更改和更新max和min的值。
答案 0 :(得分:3)
你基本上走在了正确的轨道上。使用rand() % n
将为您提供半开范围[0,n]中的值。因此,如果您想要0到100之间的数字(包括0和100),请使用rand() % 101
。如果您有最大值和最小值,n
为max - min + 1
。这将为您提供从0开始的一系列值。要获得从min
开始的一系列值,只需将min
添加到该值。