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语言如何产生不重复的随机数的主要内容,如果未能解决你的问题,请参考以下文章

C语言 随机产生10个手机号,不能重复。输入英文名后绑定手机号,一个名字一个手机号

JS生成不重复的随机数组的简单实例

C# 如何生成不重复的1-100随机数。

PHP生成不重复随机数的几种方法

如何让C#产生不重复的随机数

C语言随机数序列编程:用C语言程序编写。生成随机数序列。范围:1-15要求生成1-15的随机序列,中间无重复