gpt4 book ai didi

c++ - 尝试在C++中生成特定范围内的随机数

转载 作者:行者123 更新时间:2023-12-01 14:39:33 24 4
gpt4 key购买 nike

我试图生成一个10个随机生成的数字的列表,其范围在100000到583662之间,并且我尝试过的每件事都导致以1开头的所有数字的结果,并且从未生成高于199999的数字。我实际上已经生成了1000个数字,以查看它是否可能只是一个样本太小,但是在1000个数字中,我应该至少有几个比199999高的数字,但没有一个。这是我一直在使用的代码:

    #include <stdio.h>
#include <cstdlib>
#include <ctime>
#define SIZE 100

int main()
{
int globalArray[SIZE] = {0};
srand((unsigned)time(0));
int count;
for (int count = 0; count < 100; ++count) {
globalArray[count] = (rand() % 483662) + 100000;
}
for (int count = 0; count < 100; ++count) {
printf("%d\n", globalArray[count]);
}
return 0;
}

最佳答案

您可以使用新的<random>库而不是std::rand来提高代码的可读性:

#include <algorithm>
#include <iostream>
#include <iterator>
#include <random>

int main()
{
std::mt19937 engine{std::random_device{}()};
std::uniform_int_distribution dist{100000, 583662}; // inclusive

std::generate_n(std::ostream_iterator<int>{std::cout, "\n"}, 1000,
[&] { return dist(engine); });
}

( live demo)

要将数字生成为数组,请按以下说明操作:
std::generate_n(globalArray, SIZE, [&] { return dist(engine); });

要么:
std::generate(std::begin(globalArray), std::end(globalArray), [&] { return dist(engine); });

使用C++ 20 range或ranges-v3甚至更简单:
namespace ranges = std::ranges; // C++20
ranges::generate(globalArray, [&] { return dist(engine); });

关于c++ - 尝试在C++中生成特定范围内的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61297988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com