方法1:
1 void rand1(int n,int m) 2 { 3 for(int i=0;i<n;++i) 4 if(rand()%(n-i)<m)//用n-i比再定义一个num记录还剩几个更好 5 { 6 cout<<i<<" "; 7 --m; 8 } 9 cout<<endl; 10 }
方法2:
1 void rand2(int n,int m) 2 { 3 set<int> num; 4 while(num.size()<m) 5 num.insert(rand()%n); 6 for(set<int>::iterator iter=num.begin();iter!=num.end();++iter) 7 cout<<*iter<<" "; 8 cout<<endl; 9 }
方法3:
1 inline void swap(int *arr,int i,int j) 2 { 3 if(i==j)//一定记得要交换的两个元素相同时返回,否则返回总是0 4 return; 5 arr[i]=arr[i]^arr[j]; 6 arr[j]=arr[i]^arr[j]; 7 arr[i]=arr[i]^arr[j]; 8 } 9 10 void qsort(int *arr,int l,int u) 11 { 12 if(l>=u) 13 return; 14 int m=l; 15 for(int i=l+1;i<=u;++i) 16 if(arr[i]<arr[l]) 17 swap(arr,i,++m); 18 swap(arr,l,m); 19 qsort(arr,l,m-1); 20 qsort(arr,m+1,u); 21 } 22 23 void rand3(int n,int m) 24 { 25 int *num=new int[n]; 26 for(int i=0;i<n;++i) 27 num[i]=i; 28 for(int i=0;i<m;++i) 29 swap(num,i,rand()%(n-i)+i);//是randint(i,n-1)而不是rand()%n 30 qsort(num,0,m-1); 31 for(int i=0;i<m;++i) 32 cout<<num[i]<<" "; 33 cout<<endl; 34 delete []num; 35 }
测试程序:
1 int main() 2 { 3 srand(time(NULL)); 4 int n,m; 5 cout<<"input n and m:"<<endl; 6 cin>>n>>m; 7 rand1(n,m); 8 rand2(n,m); 9 rand3(n,m); 10 return 0; 11 }