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种方法均可实现生成不重复的随机数,具体的效率如何,小伙伴们自己测试下吧。