您的位置:首页 > 其它

一种随机数生成算法

2013-05-24 14:38 211 查看
随机数生成类

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]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  随机数 算法