如何在C语言中以随机和非重复的方式创建数组?
我正试图编写一个程序,可以将1到20之间的数字以随机和不重复的方式放入20个元素的数组中 代码如下:如何在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
#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次提取/交换来获得可证明的随机、均匀选择的排列。每次我指的是在循环内,只需重新初始化时间