C语言如何产生不重复的随机数

2024-11-22 02:19:33
推荐回答(5个)
回答1:

用一个数组装随机数,一个数组表示已经记录过的随机数;

比如说随机0-8,生成一个随机8位数组且数组内各项不重复;

例:

intarray[8];

intarrayIndex[8]={0,0,0,0,0,0,0,0};

intk=0;

srand(100);

while(k<8){

intq=rand()%8+1;

if(arrayIndex[q-1]==1){

continue;

}

array[k]=q;

arrayIndex[q-1]=1;

k++;

}

扩展资料

C语言随机输出1~20不重复的随机数

#include

#include

#include

voidmain()

{

inta[20];

inti,j;

srand((int)time(0));

a[0]=rand()%20+1;

for(i=1;i<20;i++)

{

a[i]=rand()%20+1;

for(j=0;j

{

if(a[i]==a[j])

{

i--;

}

}

}

for(i=0;i<20;i++)

{

printf("%3dn",a[i]);

}

}

回答2:

将已经产生的随机数保存下来,然后在获取到新的随机数时,与之前保存下来的值进行对比,如果已经出现过则抛弃,并再次获取,直到获取到不同的随机值为止。

以获取10个0~100之间的不重复随机数为例,代码如下:

#include 
#include 
#include 
int main()
{
    int list[10], i,j, a;
    srand(time(NULL));//设置随机数种子。
    for(i = 0; i < 10; i ++)
    {
        while(1)
        {
            a = rand()%100; //获取一个0~100之间的随机数。
            for(j = 0; j < i; j ++)
                if(list[j] == a) break;//检查重复。
                
            if(j == i)//没有重复值,保存到list中。
            {
                list[i] = a;
                break;
            }
        }
    }
    for(i = 0; i < 10; i ++)//打印获取到的随机数序列。
        printf("%d,",list[i]);
    printf("\n");
    
    return 0;
}

回答3:

主要是C默认是生成假随机数;
可加一个宏定义,randomize可让以后使用的随机数都是真随机数
代码如下:
#include
#include
#include
#define randomize() srand((unsigned)time(NULL))
main()
{
int a[52]={302,303,304,305,306,307,308,309,310,311,312,313,314
,402,403,404,405,406,407,408,409,410,411,412,413,414
,502,503,504,505,506,507,508,509,510,511,512,513,514
,602,603,604,605,606,607,608,609,610,611,612,613,614};
int i[52]={0},j,k,p;
randomize();
do
{
do
{
p=0;
j=a[(int)(rand()/(RAND_MAX+1.)*52)];
for(k=0;i[k]!=0;k++)
{
if(i[k]==j)
{
p=1;
break;
}
}
}while(p==1);
i[k]=j;
printf("%d\n",j);
getchar();
}while(k<=52);
}

回答4:

#include
#include
#include
#define N 6
int main()
{
int a[52]={302,303,304,305,306,307,308,309,310,311,312,313,314
,402,403,404,405,406,407,408,409,410,411,412,413,414
,502,503,504,505,506,507,508,509,510,511,512,513,514
,602,603,604,605,606,607,608,609,610,611,612,613,614};
int rndnum[N];
int n;
int i,j;
srand((unsigned)time(0));

for(i=0;i {
while(1)
{
n=a[rand()%52];
for(j=0;j<=i;j++)
{
if(n==rndnum[j])
break;
}
if(j>i)
{
rndnum[i]=n;
break;
}
}
}
for(i=0;i {
printf("%d ",rndnum[i]);
}
return 0;
}

回答5:

核心代码,甲即为你需要的随机数:
整数 甲;
步进循环( 整数 i=0; i<6; i++ ){
初始化随机数( 当前时间());
甲 = a[ 取随机数()%52 ];


编译器使用: 习语言编译器