产生[low,up)中m个不同的随机数,m<=up-low

来源:互联网 发布:sep软件 编辑:程序博客网 时间:2024/06/11 10:57
#include<iostream>#include<cstdlib>#include<iterator>using namespace std;//产生[low,up)中m个不同的随机数,m<=up-lowvoid 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," "));}

原创粉丝点击