如何在C语言中以随机和非重复的方式创建数组?

如何在C语言中以随机和非重复的方式创建数组?,c,C,我正试图编写一个程序,可以将1到20之间的数字以随机和不重复的方式放入20个元素的数组中 代码如下: #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int i,j,A[20],flag; srand(time(NULL)); for(i=0; i<20; i++){ flag=1; A[i]=1+r

我正试图编写一个程序,可以将1到20之间的数字以随机和不重复的方式放入20个元素的数组中

代码如下:

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

int main(void) {
 int i,j,A[20],flag;
    srand(time(NULL)); 

    for(i=0; i<20; i++){
        flag=1;
        A[i]=1+rand()%19;
       for(j=0;j<20;j++){

           if(A[i]==A[j]){
            flag=0;
             break;
           }

        }
        if(flag=0){
            continue;
        }
        else
        printf("%d ",A[i]);
   }
    return 0;
}
#包括
#包括
#包括
内部主(空){
int i,j,A[20],标志;
srand(时间(空));

对于(i=0;i您可以将1到20之间的数字放入数组中,然后使用类似于1的算法筛选数组

请参见。
rand()
不保证不重复。请随机输入索引0..19而不是值,然后与另一个随机索引0..19交换,重复Xtimes@Anders我不确定你的算法是否公正……最重要的是,X应该有多大才能得到“好的”随机排列?只需使用Yates shuffle,它是可证明的,并且具有最佳的复杂性-您需要精确的N-1次提取/交换来获得可证明的随机、均匀选择的排列。每次我指的是在循环内,只需重新初始化时间