生成随机数(在限制内)代码超过上限
Generation of random number(within a limit) code overshooting the upper limit
我的计算机科学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);
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 整数不会重复超过随机数
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 为什么 rand 不在我的代码中生成随机数?
- 我正在努力在随机数组中查找最小值,有人知道为什么我的代码不起作用?C++
- C++11 中的随机数:有没有一种简单的方法可以将生成器种子放在代码的一个位置,然后在不同的函数中使用它?
- 如何改进代码以生成安全的随机数
- 生成随机数(在限制内)代码超过上限
- 最佳实践:使用随机数生成器的测试代码
- 用于生成随机数C++的代码
- 用C++生成随机数的代码
- 随机数生成:相同的C++代码,两种不同的行为
- 我的C++代码不适用于较大的随机数组
- 提供的示例代码返回一个随机数,即使在抛出异常之后也是如此(提供的代码)
- 在c++ -11中使用相同的种子在代码的不同部分生成随机数
- 在带有MPI的c++代码中,每个进程的随机数相同