生成随机数(在限制范围内)代码超过上限

时间:2016-12-01 14:57:11

标签: c++ random

我的计算机科学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;
}

3 个答案:

答案 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]。

示例运行:http://ideone.com/Q6l0e5

对于C ++解决方案,请查看:std::unfirom_int_distribution