随机数生成类
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]);
}
}