修改rand()范围是c ++

时间:2016-01-23 21:04:46

标签: c++ random srand

我试图制作猜谜游戏程序,其中用户认为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的值。

1 个答案:

答案 0 :(得分:3)

你基本上走在了正确的轨道上。使用rand() % n将为您提供半开范围[0,n]中的值。因此,如果您想要0到100之间的数字(包括0和100),请使用rand() % 101。如果您有最大值和最小值,nmax - min + 1。这将为您提供从0开始的一系列值。要获得从min开始的一系列值,只需将min添加到该值。