要产生一组不重复的随机数,如果直接使用rand()函数多次之后可能产生相同的值,因此,假设在0~n的范围内产生n个随机数(不能重复),要产生不同的值可以通过如下方式:
1)定义一个数组,对数组进行初始化,然后定义一个变量i=n,然后在0~i-1的范围内产生一个随机数;
2)将产生的随机数与i-1位置的值进行交换;
3)然后i依次递减i--重复步骤1。
完成代码如下:
#include<iostream>
#include<cstdlib>
using namespace std;
void printArrays(int s[], int len) {
for (int i = 0; i < len; i++) {
cout << s[i] << " ";
}
cout << endl;
}
void swap(int & a,int &b){
int c=a;
a=b;
b=c;
}
void randomGenerate(int arr[],int n){
for(int i=n;i>0;i--){
swap(arr[i-1],arr[rand()%i]);
}
}
int main(){
int n;
cin>>n;
int *p=new int[n];
for(int i=0;i<n;i++){
p[i]=i+1;
}
randomGenerate(p,n);
printArrays(p,n);
}