/*************************************************************************
> File Name: test.c
> Author: xiaopeng
> Mail: 18300927271@163.com
> Created Time: Mon 01 Jul 2019 09:05:32 PM PDT
************************************************************************/
#include <stdio.h> //调用printf函数需要包含此头文件
#include <stdlib.h> //调用随机数函数需要包含此头文件
#include <time.h> //time函数
int getRandNum(int *a,int n,int min,int max) //获取[min-max]之间不重复的n个随机数保存到数组a中
{
int i,j,t,m = 0,flag;
srand(time(NULL)); //随机数种子函数
for(i=0; i<n; i++) //循环n次得到n个随机数
{
while(1)
{
flag = 0; //进入while(1),标志位置0
t = rand()%(max - min + 1) + min; //rand()%5得到 [0-4) 之间的随机数,因此rand()%(max - min + 1)可以得到[0 - (max - min + 1) )之间的随机数。再加上min 就能得到 [min - max]之间的随机数
for(j=0; j<m; j++) //第一次m = 0,不执行循环语句
{
if(a[j] == t) //新生成的随机数只要和数组中的元素重复
{
flag = 1; // flag 置1
break; //一旦找到一个重复的,直接跳出for循环
}
}
if(flag == 0) //第一次flag = 0
{
a[m++] = t; //生成的随机数和数组中已有的元素不重复时,保存到数组中。
break; //跳出while循环,继续获得后面的随机数
}
}
}
return 0;
}
int main()
{
int a[10]; //定义10个元素的数据
getRandNum(a,10,1,20); //获取[1-20]之间不重复的n个随机数并保存到数组a中
for(int i=0; i<10; i++) //遍历数组元素
{
printf("%d ",a[i]);
}
printf("\n"); //遍历完数组换行
return 0;
}
c语言获得指定范围的不重复的n个随机数
最新推荐文章于 2024-03-23 11:15:25 发布