gpt4 book ai didi

c++ - 小随机数生成程序?

转载 作者:行者123 更新时间:2023-11-27 22:55:56 25 4
gpt4 key购买 nike

我的教授给了我们以下程序作为随机数生成器

//program to demonstrate random number generator

#include<iostream>
#include<cstdlib> //needed for random number generation
#include<ctime> //needed for random number generation
using namespace std;

int main()
{
int myRandom = 0;

srand(time(NULL)); //seed random number generator - only needs to be done once

//generate a random number from 1 to 10

myRandom = rand()%10 + 1; //include this code whenever you want a random number generated

//display the random number
cout<<"Random number = "<<myRandom<<endl;

return 0;
}

我想知道是否更改行中的“10”

 myRandom = rand()%10 + 1;

到“20”会给我一个 1 到 20 之间的随机数,依此类推。

最佳答案

是的,确实如此。这归结为函数的工作方式。

rand() ( docs ) 是一个伪随机数字生成器。这很重要——它实际上并不是随机的,如果使用不当,它会变得相当可预测。如果你想要更多不可预测的数字,那就是一件复杂得多的事情。如果你想要真正的随机,那就是一些疯狂的计算!

我离题了。

当您调用 rand() 时,它会返回一个介于 0 和某个大数之间的整数,称为 RAND_MAX (docs)。为了控制上限,您必须使用模数 % 运算符 ( docs ),它返回除法的余数,而不是商。

这归结为基本的数学逻辑 - 任何数字除以 10 的余数永远不会等于或大于 10。类似地,任何数字除以 257> 永远不能有等于或大于 257 的余数。

因此,模数的第二个操作数设置了不包含最大值 - 我们总是比它小一。

但是,我们有一个问题 - 我们可以从 rand() 和模数 % 本身得到的最低可能结果是 0。(280/280 = 1,余数 0)。因此,我们必须对结果进行抵消。

这就是我们添加一个值以设置较低值的原因。算法中可能的最小随机数是0 + 我们指定的数

因此,由于 rand % 20 可以在最低时产生 0,如果我们向其添加 1,则最低值现在为 1。附带的好处是,由于包含的最大值为 19,因此上升到 20。耶!

rand() % 20 + 1 //Yields number between 1-20

但是,我们再次提出另一个警告。如果我们添加任何大于 1 的值,我们就会向上移动最大数字!在 rand % 20 + 3 的情况下,最低值为 3,但最高值为 22,这是我们不想要的!我们如何抵消它?

现在,这需要我们掌握一点数学技巧。必须更改模数的右操作数,使其加上偏移量等于不包含最大值

rand() % 18 + 3 //Yields number between 3 and 20 inclusively.

简而言之,加法的右操作数是包含最小值,两数之和是不包含最大值

关于c++ - 小随机数生成程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33155611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com