我正在为学校创建一个程序,其工作方式如下: 用户想到一个数字,然后计算机尝试猜测它。 计算机会生成一个随机数,询问用户数字是高还是低,然后如果数字高,它将使用该数字并将其设置为随机数范围的最小值(例如,生成47,则只会生成介于47-100)。 如果数字较小,则采用生成的随机数并将其设为最小值。
我的问题是随机数生成器和范围。 我可以通过在开始{srand(time(NULL));}处播种来生成随机数,然后生成一个数字{rand_num = rand()%100; }产生一个介于1到100之间的数字。但我不知道如何生成一个范围内的数字(例如47-89)。以为是{rand_num = rand()%89 + 47},但这似乎不起作用。
Github:https://gist.github.com/EthanA2020/e121b27ab80fa6e2d32df1396e62b632
{
srand(time(NULL));
do {
rand_num=rand()%47+89;
cout << rand_num << endl;
cout << "enter: "; cin >> userquitval;
}while (userquitval!=7);
}
答案 0 :(得分:3)
要在C ++ 11或更高版本中生成随机数,请使用C ++随机库。对于任何应用程序,它都应该比C实用程序更可取。
optionsScroll
阅读相关的cppreference page以获得更多信息。
答案 1 :(得分:1)
在模运算符中,您必须使用要在其中输入值的间隔的长度。
rand_num=rand()%(90-47)+47;
正如杰斯珀(Jesper)所述,这带来了偏见。要理解它,请考虑如果您想要一个等于0或1的数字,并且rand的范围是[0,1,2],会发生什么。根据上述公式,获得0的概率为0.66,获得1的概率为0.33)。
要解决此问题,您可以使用以下公式将随机数按[0,1]间隔缩放为浮点数,然后使用该公式生成所需的数字。
(double) uniform = (double) rand() / (double) RAND_MAX;
rand_num = (int) ((90.0 - 47.0)*uniform) + 47);