【发布时间】:2022-01-11 13:10:56
【问题描述】:
我想在循环中生成一个随机数 r,但我总是得到相同的数 N 次。我怎样才能达到预期的效果?
因为它是算法的一部分,所以它需要快速
while(r==i)因为我需要一个不同于i的随机数
for (int i = 0; i < N; i++)
{
srand(time(0));
do {
r = rand() % N;
} while (r == i);
}
即使srand()函数在循环外,运行N次后,r还是一样
srand(time(0));
for (int i = 0; i < N; i++)
{
do {
r = rand() % N;
} while (r == i);
}
【问题讨论】:
-
似乎您的程序运行循环如此之快以至于
time(0)总是返回相同的值。使用相同值初始化的伪随机生成器将产生相同的下一个随机值。 -
我不明白你为什么在
for循环中调用srand。只需事先调用一次。 -
while (r==i)测试起来似乎有点奇怪。 “即使 srand 在循环之外” - 哪一个?我们可以得到minimal reproducible example吗? -
请向我们展示minimal reproducible example,其中包含
N= 10 的所需输出和实际输出示例。