c++ - (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++ 随机生成器。
推荐阅读
- c# - 无法使用 C# 使用自定义文件作为资源创建 MemoryStream
- sql-server - 在不知道表中内容的情况下映射列
- wpf - 如何使用资源字典删除 WPF 菜单中下拉菜单项周围的边框
- kafka-consumer-api - Spring Kafka过滤器不过滤消费者记录
- javascript - Testcafe - 测试多个页面
- c# - 从文件中读取比 GameObject.Find 更有效?
- python - 可以编写 Python 类以便将其传递给 write() 吗?
- python-3.x - 使用 Python 跨网络复制文件
- sql - Postgres 版本化行
- r - 在ggplot中评估var