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()
.

c语言生成10个不重复的随机整数,并输出
int len = 10; \/*10个随机数*\/randomArray (arr, len,

怎样用C语言生成10个1到100的不重复的随机数?
} for(int i=0;i<10;i++)printf("%d ",a[i]);} 希望我的回答对你有帮助!

c语言如何产生随机不重复的数,我不重复不知道怎么写。怎样不重复
if(k!=0) i--;\/\/重复个数不为0,就是有重复的 } \/\/重新产生这个随机数 for(i=0;i<10;i++) printf("%4d",a[i]);}如图所示,rand产生不了不重复的随机数,所以方法就是把产生的重复的去掉。我这里举个例子,按照这个思路,插入到你的程序里就行了。望采纳。。。

如何用C语言编写出 生成10个1到20不重复的随机数。直接完整程序就好了...
define N 10 void main(){ int a[20]={0},b[N],x,i,j,t;srand((unsigned int)time(NULL));for (i=0;i<N;i++){ while(a[x=rand()%(20-2) + 2]);{ b[i]=x;a[x]=1;\/\/printf("%d ",b[i]);} } for(i =0 ;i<N-1;i++){ for(j = i+1 ;j<N;j++){...

用C语言编一个程序,需要10个1-81之间的不能相同的随机数,注意随机数...
for(i=0;i<10;i++) \/*利用一个二重循环使一维数组中所有元素都不同*\/ {for(j=10;j<i;j--) \/*我这里用的是冒泡法,你可以用下选择法弄哦^.^*\/ if(z[i]==z[j])z[j]=rand()%81+1;} printf("\\narray[10]={");for(i=0;i<10;i++){if(i<9)printf("%d,",z[i])...

C语言 0-30生成10个从小到大随机数!
include int main(){ int a[30],b[10],i,j,index;for(i = 0;i < 30;i++)a[i] = i;srand(time(NULL));for(i = 0;i < 10;i++) \/\/取十个互不相同的随机数 { index = rand()%(30-i);b[i] = a[index];for(j = index;j < 29-i;j++)a[j] = a[j+1];...

c语言,让计算机随机产生10个0—50之间的数,并输出在屏幕上。
include <stdio.h>#include <stdlib.h>#include void main(){ int i; srand((unsigned int) time(0)); \/\/初始化随机数,使得不会重复 for(i=0;i<=9;i++) { printf("%d\\n",rand()%51);\/\/保证在0-50之间 }}

如何用C语言产生不重复的0到9之间的随机数
上面的会重复 ,用我这个 include <stdlib.h> \/\/标准工具库,要用到其中的rand()include <stdio.h> include<conio.h> include \/\/时间库,要用到里面的时间来做随机数的种子 int main(void){ int i;int r;int sz[10]={0,1,2,3,4,5,6,7,8,9};srand(time(NULL));printf("Ten...

C语言中100个数中随机选取10个不同的数如何实现?
首先要确定这100个数的范围,比如0-99。然后抽取随机数,并利用模除限定范围,每当抽取到一个新的数时,同历史数据比较,如果有重复则放弃。 直到抽取到不重复的10个数为止。示例代码如下:include <stdio.h>#include <stdlib.h>#include int main(){ int a[10]; \/\/ 存储结果。 int i,...

c语言 输入十个整数,从大到小排序,并输出来。求解题思路
1、数组形式。解题思路: 判断比较的躺数,每趟相邻的两个数再进行比较,应用两次 for 循环 具体代码:void PrintArr(int* arr, int sz){ int i = 0;for (i = 0; i < sz; i++){ printf("%d ", *(arr + i));} return 0;} void BubbleSort(int arr[],int sz){ int i =...

相似回答