C++ TRandom类 怎么用?(程序如下)
classTRandom{public://缺省使用系统时间(开机后经过的毫秒数)为种子TRandom(longseed=0){mSeed=(seed?seed:GetT...
class TRandom
{ public:
//缺省使用系统时间(开机后经过的毫秒数)为种子
TRandom (long seed=0) {mSeed=(seed?seed: GetTickCount() )
//也可以定义自己的种子
void Seed(long seed=0) {mSeed=(seed?seed: GetTickCount()}
int Integer() {return Next();} //取得一个随机的整数
//取得一个在指定范围内的随机整数
int Integer(int min,int max) {return min+Next()%(max-min+1);}
//取得一个随机的(0到1之间的)小数
double Real() {return double(Next())/double(INT_MAX);}
private:
//使用调和算法
void Change() {mSeed=(314159265*mSeed+13579)%ULONG_MAX;}
//取得伪随机数发生器的随机数序列中的下一个随机整数
int Next() { int loops=mSeed%3; for (int i=0;i<=loops;i++) Change ();
return int (mSeed/2); }
unsigned long mSeed; //随机数发生器的种子
};
应用:随机排列0--19 20个整数
include <limits.h> //声明INT_MAX和ULONG_MAX常量
#include <windows.h> //声明GetTickCount()函数,其返回从开机到现在经过的毫秒数
在头文件里声明得 GetTickCount()函数 展开
{ public:
//缺省使用系统时间(开机后经过的毫秒数)为种子
TRandom (long seed=0) {mSeed=(seed?seed: GetTickCount() )
//也可以定义自己的种子
void Seed(long seed=0) {mSeed=(seed?seed: GetTickCount()}
int Integer() {return Next();} //取得一个随机的整数
//取得一个在指定范围内的随机整数
int Integer(int min,int max) {return min+Next()%(max-min+1);}
//取得一个随机的(0到1之间的)小数
double Real() {return double(Next())/double(INT_MAX);}
private:
//使用调和算法
void Change() {mSeed=(314159265*mSeed+13579)%ULONG_MAX;}
//取得伪随机数发生器的随机数序列中的下一个随机整数
int Next() { int loops=mSeed%3; for (int i=0;i<=loops;i++) Change ();
return int (mSeed/2); }
unsigned long mSeed; //随机数发生器的种子
};
应用:随机排列0--19 20个整数
include <limits.h> //声明INT_MAX和ULONG_MAX常量
#include <windows.h> //声明GetTickCount()函数,其返回从开机到现在经过的毫秒数
在头文件里声明得 GetTickCount()函数 展开
展开全部
这个类的作用就是用于生成随机数,其步骤是先设定一个种子,要么是你自己设定的一个数,要么是取系统时间。
然后就可以通过Integer函数来取随机整数了,也可以通过Real来取随机浮点数。
#include <windows.h>
#include <stdio.h>
#include <limits.h>
class TRandom
{ public:
//缺省使用系统时间(开机后经过的毫秒数)为种子
TRandom (long seed=0) {mSeed=seed?seed:GetTickCount();}
//也可以定义自己的种子
void Seed(long seed=0) {mSeed=seed?seed:GetTickCount();}
int Integer() {return Next();} //取得一个随机的整数
//取得一个在指定范围内的随机整数
int Integer(int min,int max) {return min+Next()%(max-min+1);}
//取得一个随机的(0到1之间的)小数
double Real() {return double(Next())/double(INT_MAX);}
private:
//使用调和算法
void Change() {mSeed=(314159265*mSeed+13579)%ULONG_MAX;}
//取得伪随机数发生器的随机数序列中的下一个随机整数
int Next() { int loops=mSeed%3; for (int i=0;i<=loops;i++) Change ();
return int (mSeed/2); }
unsigned long mSeed; //随机数发生器的种子
};
void main()
{
TRandom tr;
int n1 = tr.Integer();
int n2 = tr.Integer(5, 100);
double d1 = tr.Real();
printf("%d %d %lf\n", n1, n2, d1);
}
然后就可以通过Integer函数来取随机整数了,也可以通过Real来取随机浮点数。
#include <windows.h>
#include <stdio.h>
#include <limits.h>
class TRandom
{ public:
//缺省使用系统时间(开机后经过的毫秒数)为种子
TRandom (long seed=0) {mSeed=seed?seed:GetTickCount();}
//也可以定义自己的种子
void Seed(long seed=0) {mSeed=seed?seed:GetTickCount();}
int Integer() {return Next();} //取得一个随机的整数
//取得一个在指定范围内的随机整数
int Integer(int min,int max) {return min+Next()%(max-min+1);}
//取得一个随机的(0到1之间的)小数
double Real() {return double(Next())/double(INT_MAX);}
private:
//使用调和算法
void Change() {mSeed=(314159265*mSeed+13579)%ULONG_MAX;}
//取得伪随机数发生器的随机数序列中的下一个随机整数
int Next() { int loops=mSeed%3; for (int i=0;i<=loops;i++) Change ();
return int (mSeed/2); }
unsigned long mSeed; //随机数发生器的种子
};
void main()
{
TRandom tr;
int n1 = tr.Integer();
int n2 = tr.Integer(5, 100);
double d1 = tr.Real();
printf("%d %d %lf\n", n1, n2, d1);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询