【发布时间】:2021-12-28 01:59:48
【问题描述】:
我需要在 c++ 中生成两个值之间的随机数,可以这样生成(范围 1 到 6) :
#include <iostream>
#include <random>
int main(int argc, char* argv[]){
srand(time(NULL));
for (int j = 0; j < 6 ; j++) {
randomNumber = rand() % 6 + 1;
cout << randomNumber;
return 0;
}
但我还需要确保它对范围内的每个数字至少生成一次,例如:范围[1,6],则必须至少生成一次 1,2,3,4,5 和 6。
还有一点,生成的数字必须是均匀分布的,比如如果要在[1,6]范围内生成20次迭代,每个数字(1,2,3,4,5,6)应该有在 20 次迭代中产生的数量大致相同。示例:1,3,5,2,4,6,2,4,6,1,3,5,6,5,4,3,5,2,1.... 而不是这样:1, 3,5,6,6,6,2,6,4,4,4,4,4,4...
如果有人知道如何解决这个问题,我将非常感谢你。 谢谢!!!
【问题讨论】:
-
将所有数字添加到容器中是否有效,然后从容器中获取数字,如果你用完就重新洗牌吗?还有另一个数学问题可以做到这一点,但我不记得它的名字了
-
我认为你可以使用一个 int 向量,将你想要的所有数字添加为输出,然后将向量中的元素打乱,最后从末尾检索它们
-
如果你想保证所有号码都会出现,这不是随机的。
-
添加前请阅读标签说明,generate 标签是关于名为 Generate 的框架,与本题无关。
-
coliru.stacked-crooked.com/a/d4fadd1893f7893d 据我所知,这种做你想做的事,但它不是真正随机的。