我的rand数字是rand()%6 + 1又名骰子滚动,当它基于“时间”时,是否有可能制作一个控制台应用程序,预测未来的数字在我想要的时间?例如,将来某一天的时间14:40:32预测一个数字?
答案 0 :(得分:1)
是的,前提是您使用rand
的相同实现,即链接到相同版本的标准库。您只需要获得感兴趣的time_t
值,然后将其传递给srand
并致电rand
以获取值。
例如,如果time_t
包含自纪元以来的秒数(大多数实现都是这种情况),那么您可以执行以下操作以获取rand
返回的值为10 - 未来的第二个种子:
std::srand(std::time(nullptr) + 10);
std::cout << std::rand();
(暂不考虑使用rand
是否是一个好主意的问题。)
答案 1 :(得分:0)
...例如,将来某一天的时间14:40:32预测一个数字?
当知道rand()
如何在某个种子上生成伪随机数时(可用于大多数编译器开源代码实现),这是可能的。
根据您的日期和时间给出一定的种子数,因此您可以检查连续生成的随机数序列。
答案 2 :(得分:0)
是和否。 如果的值为time_t
,则只需对该值运行srand()
的同一库版本,rand()
肯定会产生相同的序列。< / p>
但你需要确定
rand()
的调用顺序是相同的,即您感兴趣的srand()和您感兴趣的rand()之间的调用次数。最后一点可能是一个停滞不前。
假设您知道应用程序是使用srand(T)初始化的,并且您知道T.现在是的,您知道其rand()的所有未来提取。但是你仍然需要知道序列中的哪一点。
格林威治标准时间19:30:17提取的数字不依赖于格林尼治标准时间19:30:17,而是取决于自调用srand()之前提取的数字。
TL; DR 如果您知道时间(0)传递给srand()的值,则无法在给定的时间预测rand()调用的输出。对于任何给定的 n ,您可以预测第n次调用rand()的输出。