对于我的班级作业,我必须生成120个随机数,范围从100-500。这是我现在使用的代码。
下面是输出的剪切和粘贴:我期待的数字从100到500不等。我不确定我做错了什么。我没有得到预期的结果。如何修复它以获得100-500的数字?
void create_random_numbers(int ran[], int x)
{
unsigned seed = time(0);
srand(seed);
int random_integer;
for (int index = 0; index<400; index++)
{
// cout << random_integer << endl<<endl;
ran[index] = (rand()%500)+100;
cout << "ran "<< ran[index] << endl << endl;
}
}
答案 0 :(得分:2)
另一种方法是使用统一的int分布 生成随机整数值i,均匀分布在闭区间[a,b]上,即根据离散概率分布
function
P(i|a,b) = 1/(b − a + 1)
.
#include <random>
#include <iostream>
#include <array>
int main()
{
std::array<int, 120> numbers;
std::random_device rd; //Will be used to obtain a seed for the
//random number engine
std::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded
// with rd()
std::uniform_int_distribution<> dis(100, 500);
for (int n = 0; n < 120; ++n)
//Use dis to transform the random unsigned int generated by gen
//into an int in [100, 500]
numbers[n] = dis(gen);
for (auto i : numbers) {
std::cout << ' ' << i;
}
std::cout << '\n';
return 0;
}
答案 1 :(得分:0)
rand() % 500
会产生[ 0...499 ]
范围内的值,因此100 + [ 0 ... 499 ]
会产生值[ 100... 599 ]
。您需要rand() % 400 + 100
。
查看以下更正后的代码:
void create_random_numbers(int ran[])
{
unsigned seed = time(0);
srand(seed);
int random_integer;
for (int index = 0; index < 120; index++)
{
ran[index] = (rand() % 400) + 100;
cout << index << " : " << ran[index] << endl << endl;
}
}
查看我制作的演示:Demo