一种随机数生成算法
2013-05-24 14:38
211 查看
随机数生成类
生成m到n之间的k个不同顺序的随机数
RandNumber randnumber;
void rand_m_number1(unsigned long x,unsigned long y,const unsigned int m){
static int count=0;
if(count==m || x>=y){
return;
}
unsigned long z=randnumber.random1(x,y);
count++;
printf("%d\t",z);
rand_m_number1(x+1,z,m);
rand_m_number1(z+1,y,m);
}
void rand_m_number2(unsigned long x,unsigned long y, unsigned int m){
int length=y-x;
unsigned long* a=new unsigned long[length];
for(int i=0;i<length;i++){
a[i]=x+i;
}
for(int i=0;i<m;i++){
int j=randnumber.random(i,length);
int tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
for(int i=0;i<m;i++){
printf("%d\t",a[i]);
}
}
class RandNumber{ static const unsigned long maxshort=65536L; static const unsigned long multiplier=1194211693L; static const unsigned long adder=12345L; unsigned long randSeed; public: RandNumber(unsigned long s=0); unsigned short random(unsigned long n); double frandom(); unsigned short random(unsigned long x,unsigned long y); }; RandNumber::RandNumber(unsigned long s/* =0 */){ if(s==0){ randSeed=(unsigned long)time(NULL); }else{ randSeed=s; } } unsigned short RandNumber::random(unsigned long n){ randSeed=multiplier*randSeed+adder; return (unsigned short)((randSeed>>16)%n); } double RandNumber::frandom(){ return random(maxshort)/double(maxshort); } unsigned short RandNumber::random(unsigned long x,unsigned long y){ return random(y-x)+x; }
生成m到n之间的k个不同顺序的随机数
RandNumber randnumber;
void rand_m_number1(unsigned long x,unsigned long y,const unsigned int m){
static int count=0;
if(count==m || x>=y){
return;
}
unsigned long z=randnumber.random1(x,y);
count++;
printf("%d\t",z);
rand_m_number1(x+1,z,m);
rand_m_number1(z+1,y,m);
}
void rand_m_number2(unsigned long x,unsigned long y, unsigned int m){
int length=y-x;
unsigned long* a=new unsigned long[length];
for(int i=0;i<length;i++){
a[i]=x+i;
}
for(int i=0;i<m;i++){
int j=randnumber.random(i,length);
int tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
for(int i=0;i<m;i++){
printf("%d\t",a[i]);
}
}
相关文章推荐
- 生成不重复随机数的一种算法。
- 生成不重复随机数的一种算法
- 生成不重复随机数的一种算法
- 生成互不相同随机数的一种算法
- [算法][随机数]一种生成2个不相同的随机数的方法
- [matlab]一种生成poisson随机数的算法
- 生成互不相同随机数的一种算法
- 生成互不相同随机数的一种算法
- 史上最全的java随机数生成算法(转)
- 算法:关于生成抽样随机数的这些算法
- 算法学习与代码实现1——开始、生成随机数
- 控制随机数生成概率的一种解决方法
- 一种算法思想:关于产生m个n范围内的不重复随机数(m<=n)
- 百度最新面试题:现在有1千万个随机数,随机数的范围在1到1亿之间。现在要求写出一种算法,将1到1亿之间没有在随机数中的数求出来
- Java 语言实现的随机数生成算法
- 生成不重复的随机数数组,算法优化
- 算法:关于生成抽样随机数的这些算法
- 控制随机数生成概率的一种解决方法
- 根据N种规格中的M种规格值生成的全部规格组合的一种算法
- JAVA/ 将任意数组内的值乱序(生成随机数)的一种方法