首页 > 解决方案 > (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;

  }

标签: c++for-loop

解决方案


如评论中所述,您只需调用srand(time(0));一次,只需在main().

原因是它rand()本身只是一个基于其起始种子的伪随机生成器(在很多情况下是一个简单的LFSR )。如果你用相同的数字重新播种算法,你会从中得到相似的数字序列,所以你的数组将被相似的数字集填充。

另外,最好使用 C++ 随机生成器。


推荐阅读