一种随机数生成算法

来源:互联网 发布:ws15知乎 编辑:程序博客网 时间:2024/06/06 06:58

随机数生成类

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]);}}



原创粉丝点击