gpt4 book ai didi

c++ - 如何生成包含两个值的随机数?

转载 作者:行者123 更新时间:2023-12-01 14:09:18 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Generating random integer from a range

(14 个回答)


4年前关闭。




我需要帮助弄清楚如何在两个用户输入的值之间生成一定数量的随机数,包括。只是你知道,我已经搜索过这个,但没有找到我刚才所说的。这是我的代码:

#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main()
{
int userBeg, userEnd, outPut;

cout << "Enter a start value: ";
cin >> userBeg;
cout << "Enter an end value: ";
cin >> userEnd;

srand(time(NULL)); //generates random seed val

for (int i = 0; i < 5; i++) {
//prints number between user input, inclusive
outPut = rand()%((userEnd - userBeg) + 1);
cout << outPut << " ";
}//end for

return 0;
}//end main

我对以下范围的输出感到困惑:
1-100 产生的输出数字介于但不包括 50、97、24、59、22 等边界之间。
但是,10-20 会产生诸如 1、14、6、12、13 之类的数字。在这里,输出在边界之外以及在它们之间。我究竟做错了什么?

预先感谢您的帮助!

最佳答案

使用 c++11 random 图书馆。

您可以使用 std::default_random_engine (或任何其他随机引擎)与 std::uniform_int_distribution .

您传递给 std::uniform_int_distribution 的值将是您的随机范围的下限和上限。

例如

#include <iostream>
#include <random>

int main()
{
const int nrolls = 100;

std::default_random_engine generator;
std::uniform_int_distribution<int> distribution(0,9);

int p[nrolls]={};

for (int i=0; i<nrolls; ++i)
{
p[i] = distribution(generator);
}

std::cout << "uniform_int_distribution (0,9):" << '\n';
for (int i=0; i<nrolls; ++i)
{
std::cout << i << ": " << p[i] << '\n';
}
}

如果您希望为随机引擎设置种子,请创建它。
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();

std::default_random_engine generator(seed);

关于c++ - 如何生成包含两个值的随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40275512/

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