Tim*_*m0n 0 c++ random generator
我一直在寻找比我自己更好的解决方案,而且我真的找不到一个我理解或对我有用的解决方案.
我做了一个简单的游戏,计算机随机生成一个数字然后你猜一个数字,如果它更高,计算机说更高,等等..
问题是我的随机生成的数字,查找有关的信息很多后<random>,uniform_int_distribution和default_random_engine.我发现计算机生成一个随机数,但如果再次运行程序,将生成相同的随机数.
我的解决方案
uniform_int_distribution<unsigned> u(0,100); // code to randomly generate numbers between 0 and 100
default_random_engine e; // code to randomly generate numbers
size_t userInput; // User input to find out where to look in the vector
vector<int> randomNumbers; //vector to hold the random numbers
unsigned start = 0, ending = 101, cnt = 0; // used in the game not important right now
cout << "Please enter a number between 1 and 1000 for randomness" << endl;
cin >> userInput;
for(size_t i = 0; i < 1000; ++i){ //for loop to push numbers into the vector
randomNumbers.push_back(u(e));
}
unsigned guess = randomNumbers[userInput]; // finally the number that the user will have to guess in the game
Run Code Online (Sandbox Code Playgroud)
我现在的解决方案是使用向量,其中我推送大量随机生成的数字然后要求用户键入一个数字,然后计算机用于游戏.但应该有更好的方法来做到这一点.因此,我的问题是
要么std::random_device代替使用std::default_random_engine,要么想到每次运行时为引擎提供不同数字的方法.
此数字称为"种子",可以作为可选参数传递给构造函数.由于std::default_random_engine是特定于实现的,并且不同的引擎在播种方面做了不同的事情,因此如果您提供种子,通常需要选择特定的引擎.确定性伪随机数生成器将为任何给定种子生成相同的输出序列,因此您希望每次使用不同的种子.
对于像猜谜游戏这样的非安全用途,用作种子的最"明显"的东西是当前时间.一般来说,每次运行程序时这都是不同的,但很明显,如果你可以以低于时钟粒度的速度运行程序两次,那么事实并非如此.因此,使用时间为随机引擎播种是非常有限的,但它将为玩具程序做好准备.
| 归档时间: |
|
| 查看次数: |
451 次 |
| 最近记录: |