【问题标题】:In C, how to generate different random numbers in a loop?在C中,如何在循环中生成不同的随机数?
【发布时间】: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 的所需输出和实际输出示例。

标签: c random


【解决方案1】:

有点不清楚您想要什么,但这似乎可以满足您的需求:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 100
int main(void)
{
  srand(time(0));
  for (int i = 0; i < N; i++) {
    int r;
    do {
      r = rand() % N;
    } while (r == i);

    printf("%d ", r);
  }
}

【讨论】:

    猜你喜欢
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多