修改 rand() 范围 c++

Modifying rand() ranges c++

我正在尝试制作一个猜谜游戏程序,用户想一个 1 到 100 之间的数字,然后计算机随机生成(猜测)一个 1 到 100 之间的数字。然后用户告诉计算机是否他们的数字更高(H),更低(L),或相同(Y)猜测的数字。我遇到的问题是更改计算机生成猜测的范围。

所以假设我的号码是 43 并且计算机生成 15 作为它的猜测。我会输入H,说明我的数字比它猜的要高。然后计算机更改参数以生成介于 16100.

之间的数字
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

而我不断更改和更新最大值和最小值。

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