我正试图使用一个在给定范围内生成随机数的函数在C++中填充一个简单数组。不管出于什么原因,它给了我每个元素相同的随机数。我认为这个问题与我在哪里播种随机变量有关。
有什么想法吗?
#include <iostream> // for user input/output
#include <cstdlib> // for rand/srand functions
#include <ctime> // for time usage
using namespace std;
const int SIZE = 10;
const int MIN = 100;
const int MAX = 200;
int main()
{
int Arr[SIZE];
for (int i = 0; i < SIZE; i++){
Arr[i] = rng(MIN, MAX);
}
for (int j = 0; j < SIZE; j++){
cout << Arr[j] << " ";
}
}
int rng(int lo, int hi){
static bool variable;
variable = false;
if (variable == false){
srand(time(0));
variable = true;
}
return rand() % (hi - lo + 1) + lo;
}
如注释中所述,您只需要调用srand(time(0));
一次,只需在main()
开始时调用即可。
原因是rand()
本身只是一个基于其起始种子的伪随机生成器(在很多情况下是一个简单的LFSR(。如果你用相同的数字重新设定算法,你会从中得到相似的数字序列,所以你的数组会填充相似的数字集。
此外,最好使用C++随机生成器。