C语言随机函数怎样产生0-9互不相同的10个随机数

2024-11-15 11:59:00
推荐回答(4个)
回答1:

对已经获取到的随机数做标记,如果已经获取到过,那么则放弃该随机数,并继续获取。

直到获取到所有随机数为止。

参考代码如下:

#include 
#include 
#include 

int main()
{
    int a[10];//存储获取到的随机数。
    int f[10] = {0};//存储是否获取到过。
    int n = 0; //计数器。
    
    srand(time(NULL));//设置随机数种子。
    
    while(n<10)
    {
        int m = rand()%10; //获取一个0~9的随机数。
        if(f[m]) continue;//该数之前已经获取到过。
        a[n++] = m;//将该数存入数组。
        f[m] = 1;//标记该数已经获取过。
    }
    
    for(n = 0; n < 10; n++)//打印结果。
        printf("%d,",a[n]);
    
    return 0;
}

回答2:

循环重写下,关键是你找到重复后重新生成的时候没有重新判定。
for(i = 0; i < 10; ++i)
{
a[i] = rand()%10;
for(j = 0; j < i; ++j)
{
if( a[i] == a[j])
{
a[i] = rand()%10;
j = -1;
}
}
}
不过不停这么判定的话效率很低的。
可以建立一个数组b[10] = {0,1,2,3,4,5,6,7,8,9};
大致如下
int bLength = 10, index = 0;
for(i = 0; i < 10; ++i)
{
index = rand()%bLength;//防止出错的话应该对index值进行判定,这里就略去了
a[i] = b[index];
b[index] = b[bLength-1])
--bLength;
}

回答3:

srand((unsigned)time(0));
以系统时间为种子这样每次产生的书就是随机数,否则产生伪随机数

回答4:

#include
#include
#include

main()
{
int a[10];
int b[10];
int i,index,x=0;
for(i=0;i<10;i++)
a[i]=i+1;
srand((unsigned)time(0));
for(i=0;i<10;)
{
index=rand()%10;
if(a[index]!=0)
{
b[i]=a[index];
printf("%d\n",b[i]);
a[index]=0;
++i;

}
}
}