我有一个程序,每次鼠标点击都会创建一组新的随机数。如果我在没有 srand 的情况下运行程序( time(NULL) );每次的数字都是一样的。如果我用 srand ( time(NULL) ) 运行程序;那么我可能会点击垃圾邮件并且数字会重复。我怎样才能解决这个问题?
问问题
985 次
2 回答
4
您的问题是关于使用相同值播种随机数生成器。该srand
函数用于为它初始化所谓的“种子”。种子可用于在序列中生成相同的随机数。
首先你需要初始化生成器,然后只调用rand
不带参数的函数,它会生成随机数。例如:
/* initialize random seed with actual date-time */
std::srand(std::time(NULL));
/* generate ten random number lower than 10 */
int random, times = 10;
while(times){
random = std::rand() % 10;
times--;
}
关于“垃圾邮件点击”:std::time(NULL)
具有以秒为单位的精度,因此如果您在同一秒内点击,您将使用相同的值初始化随机种子。
这是官方 c++ 参考网站上的一个示例,也是 cplusplus.com上的另一个示例。
于 2012-10-14T20:52:02.373 回答
0
rand
函数不太擅长生成随机数,看看boost::random
. 它很棒,可以创建随机和半随机数
于 2012-10-14T00:22:49.980 回答