#include<iostream>
#include<cstdlib>
#include<iterator>
using namespace std;
//产生[low,up)中m个不同的随机数,m<=up-low
void getMrandum(int result[],int low,int up,int m)
{
int len=up-low;
int* randsource=new int[len];
for(int i=0;i<up-low;i++)
{
randsource[i]=i;
}
srand((unsigned)time(NULL));
for(int i=0;i<m;i++)
{
int tem_len=len-1;
int pop_index=rand()%tem_len;
//cout<<"pop_index["<<"i]="<<pop_index<<" \n";
int pop_value=randsource[pop_index];
randsource[pop_index]=randsource[tem_len--];
result[i]=pop_value+low;
}
delete []randsource;
}
//打乱一个序列(从[0,n)中取出n个不重复的随机数)
void shuffle(int result[],int n)
{
srand((unsigned)time(NULL));
for(int i=0;i<n;i++)
{
result[i]=i;
}
for(int i=n-1;i>0;i--)
{
swap(result[i],result[rand()%i]);
}
}
int main(int argc, char** argv)
{
int result_1[10]={0};
//从[100,200)中取出10个不同的随机数
getMrandum(result_1,100,200,10);
copy(result_1,result_1+10,ostream_iterator<int>(cout," "));
cout<<"\n";
//将[0,10)随机重排
int result_2[10]={0};
shuffle(result_2,10);
copy(result_2,result_2+10,ostream_iterator<int>(cout," "));
}