c - 使用非重复随机数(C 中)

标签 c random srand

我被分配创建一个非重复数字生成器,它生成 7 个数字。我已经使用了 rand 函数。但不知道如何确保数字不重复。感谢您的帮助

    int i, n;
    time_t t;
    n = 7;
    srand((unsigned) time(&t));

    for( i = 0 ; i < n ; i++ ) {
    printf("%d\t", rand() % 35);}

最佳答案

您必须将之前创建的所有随机数存储到一个数组中,下次您必须将数组值与新创建的随机数进行比较,无论它是否已经创建。请参阅下面的代码并自行尝试。

int i, n;
time_t t;
n = 7;
int randval[n]
int rval = 0;
int j = 0;
srand((unsigned) time(&t));
int found = 0;
for( i = 0 ; i < n ; ) {
  rval = rand();
  j = 0;
  found = 0;
  while(j++ < i ){
     if(rand[j] == rval){
       found = 1;
       break;
     }
  }
  if(!found){      
     randval[i] = rval;
     i++;
     printf("%d\t", rval % 35);
   }
}

关于c - 使用非重复随机数(C 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47499475/

相关文章:

c - srand()——为什么只调用一次?

c - 为什么这个 C 循环会跳过第一次输入字母的尝试?

c - 用c函数添加API_EXPORTED的意思

c - 在 C 代码中连接到 Oracle 时指定的 url 在哪里

c - MISRA 错误 : field type should be int, 无符号整数或有符号整数

R生成具有定义行数和列数的简单整数矩阵

algorithm - 前向随机数的概率分布

java - 随机化游戏板的障碍

C++ srand,DLL 中的 rand 奇怪行为

c++ - 我在用 srand 在 C++ 中构建非重复随机数组时做错了什么?