我的计算机科学C ++书中说,要生成具有下限(在本例中为15)和上限(在本例中为50)的随机数,我们必须使用以下代码。但是当我使用它时,我的输出为53,52,49,15。是否有原因导致程序提供超出上限的结果或代码错误。
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(){
int i,rdno;
for(i=1;i<5;++i){
rdno=(rand()%50)+15;
cout <<rdno<<endl;
}
return 0;
}
答案 0 :(得分:2)
此处:rdno = (rand()%50)
您指定了0-49之间的伪随机数。如果你添加15,你会得到15到64之间的数字。如果你想要数字从15到50,你可以这样做:rdno = (rand()%36) + 15
。
编辑:你需要使用%36
,因为你想要的最高数字是50.你可以得到它,当rand()
生成35,然后35%36
等于35,以及35+ 15等于50.如果你使用%35
,你可以获得的最高数字是49。
答案 1 :(得分:1)
因为rand() % 50
的结果被添加到15.所以你的范围是15-65。
你的范围真的是35(如果包括36,那么你可以改为:
15 + (rand() % 35)
但实际上,如果您可以访问C ++ 11,请使用<random>
:
#include <random>
std::random_device rd;
std::mt19937 rng(rd());
std::uniform_int_distribution<int> dis(15, 50);
int random_integer = dis(rng);
答案 2 :(得分:1)
在C中生成一个介于[x,y]之间的随机数的最佳方法,使得y <0。 32768如下:
int random(int low, int high) {
return rand() % (high - low + 1) + low;
}
注意模数运算符的+1,这是允许包含50.没有它,你的范围变为[15,50]。
对于C ++解决方案,请查看:std::unfirom_int_distribution