(C++)试图用给定范围内的随机数填充数组,一遍又一遍地用相同的数字填充



我正试图使用一个在给定范围内生成随机数的函数在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++随机生成器。

相关内容

  • 没有找到相关文章

最新更新