第1个回答 推荐于2017-10-10
将已经产生的随机数保存下来,然后在获取到新的随机数时,与之前保存下来的值进行对比,如果已经出现过则抛弃,并再次获取,直到获取到不同的随机值为止。
以获取10个0~100之间的不重复随机数为例,代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
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;
}
第2个回答 2012-04-28
主要是C默认是生成假随机数;
可加一个宏定义,randomize可让以后使用的随机数都是真随机数
代码如下:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#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);
}
第3个回答 2012-04-18
#include <stdio.h>
#include <time.h>
#include<stdlib.h>
#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<N;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<N;i++)
{
printf("%d ",rndnum[i]);
}
return 0;
}本回答被网友采纳
第4个回答 2012-04-26
核心代码,甲即为你需要的随机数:
整数 甲;
步进循环( 整数 i=0; i<6; i++ ){
初始化随机数( 当前时间());
甲 = a[ 取随机数()%52 ];
}
编译器使用: 习语言编译器