c - 没有重复数字的随机数组

标签 c arrays random

所以我想做的是创建一个由 5 个元素组成的随机数组,这些元素应该用 1 到 6 的数字填充,并且它们不会重复,我不知道我的逻辑错在哪里。

void genNumber(int vet[]){
   int max, i, j, atual;
   srand(time(NULL));

   max = 7;
   for (i=0;i<5;i++){
      vet[i] = rand() % max;
      while(vet[i] == 0){
         vet[i] = rand() % max;
      }

      for(j=0;j<i;j++){
         atual = vet[j];
         while((vet[i] == atual)||(vet[i] == 0)){
            vet[i] = rand() % max;
            atual = vet[j];
         }
      }
   }
}

更新:已修复

void genNumber(int vet[]){
int max, i, j;
srand(time(NULL));

max = 7;
for (i=0;i<5;i++){
    vet[i] = rand() % (max-1) + 1;

    for(j=0;j<i;j++){
        while(vet[j] == vet[i]){
            vet[i] = rand() % (max-1) + 1;
            j = 0;
        }
    }
}
}

最佳答案

逻辑缺陷在于发现重复项时生成新随机数的方式。

假设您已经有了 vel = {1,2,0,0,0,...} 并且正在尝试查找 vel[2] 的数字。如果您随机绘制一个2,您会发现它已经在那里并再次绘制。但是,如果您这次绘制 1,您将不会注意到,因为您仅与最后看到的值(示例中的 2)进行比较。所以你会得到vel = {1,2,1,...}

“解决方案”:每次您抽取一个新的随机数时,都必须将其与列表中已有的所有数字进行比较。

解决此问题的另一种方法是我在评论中尝试概述的方法:您必须在某处保留有关哪些号码对于抽奖仍然有效的信息。您可以像现在一样使用“输出”数组,也可以使用另一个存储,在绘制条目后从中“删除”条目。

关于c - 没有重复数字的随机数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33284644/

相关文章:

c - 头文件 : type defaults to 'int' 中的结构定义

pthread_cond_signal 可以唤醒多个线程吗?

Java:在 X-Y 网格上绘制 .flac 音频文件的左声道和右声道。 (示波器)

java - 如何将数组解析为数组 JSON

python - Python 中的 Seed() 和随机数

c - STM32调试器遇到断点后继续运行

c++ - C 与 C++ 中的枚举存储差异

javascript - 多维数组之和javascript

java - 正确生成随机数

python - 为什么在传递递减值列表 "random.choices"时 "cum_weights"总是返回相同的元素?