64,662
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <cmath>
#include <ctime>
using namespace std;
unsigned long int next = 1;
void mysrand(unsigned int seed)
{
next = seed;
}
int myrand()
{
cout << "next: " << next << endl;
next = next * 1103515245 + 12345;
unsigned int ret = (unsigned int)(next / 65536) % 32768;
return ret;
}
int main()
{
mysrand((unsigned int)time(0));
for (int i = 0; i < 10; ++i)
{
//mysrand((unsigned int)time(0));
cout << myrand() << endl;
}
return 0;
}
rand 需要你给一个种子
for(int i=0;i!=N;++i)
rand();// 输出的是i个伪随机数 具体是个什么数学函数没研究
比方是 1 2 3 2 1 是一个周期的数 伪随机的
for(int i =0;i!=N;++i)
{
seed =1;
rand();// 输出1个 总是那一个 周期里面的第一个
}
//rand产生的原理:y=ax+b(mod n) 线性同余
//具体原理 网上查查
//打个比方吧 从0-RAND_MAX 中间的数 返回 周期长(可以理解成返回队列的数很多)
//但是返回顺序是一定的 相当于几率是一样的
//就是为什么说是伪随机的原因
//当变了seed 返回的数的顺序就变一次
//取了 不同的seed rand()出来的顺序就变了
它是一个数学函数问题,有个很长的周期,输出的时候 好像每次都不同似的,但是顺序是一定的。
只是周期特别长,不设置变的seed,每次运行输出都是一样的。
放在里面 每次都从第一个输出,放在外面则不同。