C语言如何产生不重复的随机数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言如何产生不重复的随机数相关的知识,希望对你有一定的参考价值。
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;
从中产生6个不重复的随机数,具体代码怎么写啊?
用一个数组装随机数,一个数组表示已经记录过的随机数;
比如说随机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<stdio.h>
#include<stdlib.h>
#include<time.h>
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<i;j++)
if(a[i]==a[j])
i--;
for(i=0;i<20;i++)
printf("%3dn",a[i]);
参考技术A将已经产生的随机数保存下来,然后在获取到新的随机数时,与之前保存下来的值进行对比,如果已经出现过则抛弃,并再次获取,直到获取到不同的随机值为止。
以获取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;
参考技术B 主要是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);
参考技术C #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;
参考技术D 核心代码,甲即为你需要的随机数:
整数 甲;
步进循环( 整数 i=0; i<6; i++ ){
初始化随机数( 当前时间());
甲 = a[ 取随机数()%52 ];
}
编译器使用: 习语言编译器
JAVA中怎么随机产生一个不重复的四位数
//题主估计想问产生一个四个不同数字的四位数////首先千位不为0
String number=String.valueOf((int)(Math.random()*9+1));
//再产生其它三位数
for(int i=0;i<=2;)
String newnumber=String.valueOf((int)(Math.random()*9));
if(!number.contains(newnumber))
number=number+newnumber;
i++;
System.out.println(number); 参考技术A (int)((Math.random()*9+1)*1000)随机四位数
类似的后面1000的位数增加到几位就是随机几位数 参考技术B (int)((Math.random()*9+1)*1000)
以上是关于C语言如何产生不重复的随机数的主要内容,如果未能解决你的问题,请参考以下文章