1.会有重复
#include<stdio.h> #include<stdlib.h>//头文件 //生成随机数(每次调用都相同,因为种子都为1) int main() { int a[10]; for(int i=0;i<10;i++) { a[i]=rand();//不设随机数种子,默认为1 } for(int i=0;i<10;i++) { printf("%d ",a[i]); } return 0; } //若范围为0-100,a[i]=rand()%101;
srand((unsigned int)time(NULL)); for(int i=0;i<10;i++) { a[i]=rand()%101; }
for(int i=0;i<10;i++) { a[i]=rand()%(right-left+1)+left; }
2.生成不重复随机数组
#include<stdio.h> #include<stdlib.h> #include<time.h> //生成不重复的随机数 void swap(int a[],int i,int j) { int t; t=a[i]; a[i]=a[j]; a[j]=t; } int main() {//范围[0,n]随机数 int n=20,m=10,k; int a[n]; srand((unsigned int)time(NULL)); for(int i=0;i<n;i++)//先把数组填满 a[i]=i+1; for(int i=n-1;i>0;i--) { k=rand()%i;//产生0-i的随机数的下标 swap(a,k,i);//与最后一个交换 }//全部遍历一遍能产生全部的随机数 for(int i=0;i<m;i++) printf("%d ",a[i]); return 0; }
int main() {//范围[m,n)随机数 int n=30,m=10,k; int a[n-m]; srand((unsigned int)time(NULL)); for(int i=0;i<n-m;i++)//先把数组填满 a[i]=i+m; for(int i=n-m-1;i>0;i--) { k=rand()%i;//产生0-i的随机数的下标 swap(a,k,i);//与最后一个交换 }//全部遍历一遍能产生全部的随机数 for(int i=0;i<n-m;i++) printf("%d ",a[i]); return 0; }