C++编写生成不重复的随机数代码
C++编写生成不重复的随机数代码
vector<int>getRandom(inttotal) { srand((int)time(NULL)); std::vector<int>input=*newstd::vector<int>(); for(inti=0;i<total;i++){ input.push_back(i); } vector<int>output=*newvector<int>(); intend=total; for(inti=0;i<total;i++){ vector<int>::iteratoriter=input.begin(); intnum=random()%end; iter=iter+num; output.push_back(*iter); input.erase(iter); end--; } returnoutput; }
再来一例:
voidpermutation(intn,int*z_array) { inti,j,k,z; intbuffer[N]; /*初始化数组*/ for(i=0;i<n;i++) buffer[i]=0; /*准备生成随机数,以当前时间为种子*/ srand((unsigned)time((long*)0)); /*获得不重复的随机数据*/ for(i=0;i<n;i++){ /*获得0~(n-i)的随机数据*/ z=rand()%(n-i); j=0;k=0; while(j<=z){ if(buffer[j+k]==0)j++; elsek++; } buffer[j+k-1]=1; z_array[i]=j+k-1; } return; }
方法三:来个复杂点的
#include<stdio.h> #include<time.h> #include"iostream" #include<math.h> #defineN53 usingnamespacestd; //printarray voiddisplay(int*a) { for(inti=0;i<N;i++) { cout<<""<<a[i]<<""; } } intmain(void) { intb[N],a[N]; for(inti=0;i<N;i++) { b[i]=i+1; } //random(a); srand((unsigned)time(NULL)); intMaxIndex=N; for(i=0;i<N;i++) { // intindex=(int)rand()%MaxIndex;//随机一个0-52的index a[i]=b[index];//随机到的数字给a[i],ifrom0toN-1 b[index]=b[MaxIndex-1]; MaxIndex--; } display(a); return0; }
以上3种方法均可实现生成不重复的随机数,具体的效率如何,小伙伴们自己测试下吧。