一组不重复的随机数的产生方式
2013-06-24 12:50
211 查看
要产生一组不重复的随机数,如果直接使用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
;
for(int i=0;i<n;i++){
p[i]=i+1;
}
randomGenerate(p,n);
printArrays(p,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
;
for(int i=0;i<n;i++){
p[i]=i+1;
}
randomGenerate(p,n);
printArrays(p,n);
}
相关文章推荐
- c产生一组不重复的随机数
- 高效产生一组不重复的随机数(受编程珠矶启示)java实现
- 高效产生一组不重复的随机数
- 产生一组不重复的随机数
- C#产生一组不重复随机数的两种方法
- 在一个整数区间里产生一组不重复的随机数
- 产生一组少重复的随机数
- java 产生一组不重复的随机数
- 随机不重复排序算法及Java产生随机数的3种方式
- 产生一组不重复随机数的高效算法
- [转] 高效的产生一组不重复的随机数
- java 产生一组不重复的随机数
- 高效产生一组不重复的随机数(受编程珠矶启示)java实现
- C#产生随机数 不重复
- java产生随机数的几种方式
- java产生随机数的几种方式
- 产生100以内的不重复随机数
- 产生10个不重复的随机数并排序、选最大
- 产生不重复的随机数
- C++产生不重复的随机数