我正在尝试实现一个可以生成伪随机序列的类。
构造函数应具有初始种子,乘数,增量和模数作为参数。一个成员函数应允许更改种子,一个函数应生成并返回伪随机序列中的下一个数字。
我的结果是错误的。我在做什么错了,什么是正确的实现。
伪随机序列的头文件:
#include<iostream>
using namespace std;
class pRandInt
{
public:
pRandInt();
//Default constructor with parameters
pRandInt(int, int, int, int);
//intial number in pseudorandom sequence
//permits the seed to be changed
void setFirstNum(int);
//generate the next number in the pseudorandom sequence
int getNextNum();
private:
int newSeed;
int newMulti;
int newIncr;
int newMod;
};
伪随机序列的实现文件:
#include "pRandInt.h"
pRandInt::pRandInt()
{
int newSeed = 0;
const int newMulti = 40;
const int newIncr = 725;
const int newMod = 729;
}
pRandInt::pRandInt(int seed, int multi, int incr, int mod)
{
newSeed = seed;
newMulti = multi;
newIncr = incr;
newMod = mod;
}
void pRandInt::setFirstNum(int seed)
{
newSeed = seed;
}
int pRandInt::getNextNum()
{
return (newMulti * newSeed + newIncr) % newMod;
}
伪随机序列的主要测试文件:
#include <iostream>
#include "pRandInt.h"
using namespace std;
int main()
{
int seed = 0;
pRandInt num;
num.setFirstNum(seed);
cout << "The first number in your sequence is: ";
cin >> seed;
cout << "The other numbers in your sequence are: ";
cout << num.getNextNum() << endl;
system("pause");
return 0;
}
最佳答案
您的问题出在这里:
int pRandInt::getNextNum()
{
return (newMulti * newSeed + newIncr) % newMod;
}
如果仔细查看该函数及其调用方式,您会发现这些值都没有改变。如果您想查看其他输出,则习惯(有人说有必要)更改其中之一。
我的建议是调查种子:-)
缺少实际为您编写代码的方法(在尝试回答有关SO的明显教育性问题时,我往往会皱眉),这将为我提供尽可能多的帮助。但是,这对于您自己解决问题绰绰有余。
关于c++ - 伪随机整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41800500/