c语言生成10个不重复的随机整数,并输出

c语言生成10个不重复的随机整数,并输出

#include <stdio.h>
#include <time.h>

#define elemType int /*元素类型*/
#define LEN 100 /*数组长度上限*/

/*生成n项min~max范围的随机数并存入数组randArr*/
void randomArray (elemType randArr[LEN], int n, elemType min, elemType max) {
int i;
srand ((unsigned)time(NULL)); /*用时间做种,每次产生随机数不一样*/
for (i=0; i<n; i++)
randArr[i] = rand(NULL) % (max-min+1) + min; /*产生min~max的随机数*/
}

/*打印数组*/
void printArr (elemType arr[], int len) {
int i;
for (i=0; i<len; i++)
printf ("%d\t",arr[i]);
putchar ('\n');
}

int main (void) {
elemType arr[LEN];
int len = 10; /*10个随机数*/

randomArray (arr, len, 1, 50); /*随机生成数组内容*/ 
printArr (arr,len);
putchar ('\n');

getch (); /*屏幕暂留*/ 
return 0;
}

运行结果

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-01-08

很简单

只需要输入的时候检查该数字是否已经在之前存在过就好

如果存在就不保存

如果不存在就进行保存

下面是一个简单的代码

#include <stdio.h>
#include <stdlib.h>

int in(int *a,int n)
{
    int i;

    for(i=0;i < 10;++i)
        if(a[i] == n)
            return 1;

    return 0;
}

int main(int argc,char **argv)
{
    int a[10]={0};
    int i;
    int n;

    for(i=0;i < 10;)
    {
        n=rand()%65535;

        if(in(a,n))
            continue;

        a[i]=n;
        ++i;
    }

    for(i=0;i < 10;++i)
        printf("%d ",a[i]);
    printf("\n");

    return 0;
}

也可以使用散列表来做

不过会稍显复杂

对于这题来说

数量并不多而且计算量也不大

所以这种方法就可以了

本回答被网友采纳
第2个回答  2016-01-08
#include "stdafx.h"
#include <conio.h>
#include <stdlib.h>
#include <time.h>

#define N 10

void swap(int * x,int * y)
{
    int temp;
     
    temp = *x;
    *x = *y;
    *y = temp;
}

int _tmain(int argc, _TCHAR* argv[])
{
int a[N],i;

srand(time(NULL));

for(i=0; i<N; ++i)
a[i]=i;
for(i=N-1; i>=1; --i) 
swap(&a[i], &a[rand()%i]);

for(i=0; i<N; ++i)
printf("%d\n",a[i]);

getch();
return 0;
}

首先第二行按顺序用0~9填满整个数组;

是随机产生0到m-2个数组下标,把这个下标的元素值跟m-1下标的元素值交换,

一直进行到下标为1的元素。因此它只需要遍历一次就能产生全部的随机数

第3个回答  2017-08-14
rand()
.