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

Generation of random number(within a limit) code overshooting the upper limit

本文关键字:代码 随机数      更新时间:2023-10-16

我的计算机科学C 书籍说,要生成具有下限的随机数(在这种情况下为15)和上限(在这种情况下为50),我们必须使用以下内容代码。但是当我使用它时,我的输出为56,32,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;
}

如果要在[a; b)中生成一个数字

rdno = rand() % (b-a) + a

在这里: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。

在[x,y]之间生成随机数的最佳方法,使得y&lt;32768如下:

int random(int low, int high) {
    return rand() % (high - low + 1) + low;
}

注意模量运算符的 1,这是允许包含50。没有它,您的范围将变为[15,50)。

样本运行:http://ideone.com/q6l0e5

对于C 解决方案,请查看以下内容:STD :: fifirom_int_distribution

,因为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);