C++ 是否可以预测srand(时间(0))的随机数?

C++ 是否可以预测srand(时间(0))的随机数?,c++,C++,我的兰特号码是rand()%6+1又称掷骰子,当它基于“时间”时,是否可以制作一个控制台应用程序,在我想要的时间预测未来的号码?例如,预测未来某一天时间14:40:32的数字?是,前提是您使用相同的rand实现,即链接到相同版本的标准库。您只需获取感兴趣时间的time\t值,然后将其传递到srand并调用rand获取值 例如,如果time\u t保存了自纪元以来的秒数(这是大多数实现的情况),则您可以执行以下操作,以获得rand返回的值,并在未来的种子中保留10秒: std::srand(std

我的兰特号码是rand()%6+1又称掷骰子,当它基于“时间”时,是否可以制作一个控制台应用程序,在我想要的时间预测未来的号码?例如,预测未来某一天时间14:40:32的数字?

是,前提是您使用相同的
rand
实现,即链接到相同版本的标准库。您只需获取感兴趣时间的
time\t
值,然后将其传递到
srand
并调用
rand
获取值

例如,如果
time\u t
保存了自纪元以来的秒数(这是大多数实现的情况),则您可以执行以下操作,以获得
rand
返回的值,并在未来的种子中保留10秒:

std::srand(std::time(nullptr) + 10);
std::cout << std::rand();
std::srand(std::time(nullptr)+10);
标准::cout
。。。例如,预测未来某一天的时间14:40:32的数字

如果知道
rand()
如何准确地在某个种子上生成伪随机数(这对于大多数编译器开放源代码实现是可用的),这是可能的

您有一个从日期和时间给定的特定种子数,因此您可以只检查连续生成的随机数序列。

是和否。如果您的值为
time\u t
,则只需对该值运行相同的库版本的
srand()
,以及
rand()
肯定会产生相同的序列

但你必须确定

  • 两个应用程序中的随机库使用相同的实现(我认为这是Mersenne Twister,但我需要检查)
  • 两个应用程序的时钟是同步的。如果您认为主应用程序的时钟是14:30:17,但实际上是14:30:18,那么在监视器应用程序中输入14:30:17(当然)将得到不同的值
  • 两个应用程序中对
    rand()
    的调用顺序是相同的,也就是说,您知道srand()和您感兴趣的rand()之间的调用次数
最后一点可能是一个阻碍

假设你知道应用程序是用srand(T)初始化的,你知道T。现在是的,你知道它的rand()的所有未来提取。但是你仍然需要知道你在序列中的哪一点

在19:30:17 GMT提取的数字将不取决于“19:30:17 GMT”,而是取决于自调用srand()以来提取的数字数量


TL;DR如果知道时间(0)传递给srand()的值,则无法预测给定时间的rand()调用的输出。你可以预测第n次调用的输出,对于任何给定的N.<,P >你可能都到了。如果你在C++中编程,<代码>包含了< /C> >,忘记<代码> RAND()/Cuff>。tldr:选择好时机启动游戏nethack,这样它将保证在1级成为非常罕见的物品。glibc中正常的
rand
不是Mersenne Twister。当然,关键是,普通C库中只有这么多随机数生成器,所以不难猜测其中一个(或者尝试所有三个或四个)。如何制作一个控制台应用程序,在未来10秒内显示所有随机数?例14:48:53数字:3,14:48:54数字:5等等on@Sick654:容易。您通常使用
time
值调用
srand
,但没有任何东西禁止您使用
time()+10
调用
srand
,好的,我知道了,但是如何在控制台上每秒循环显示预测时间,然后显示随机数?@Sick654:输入所需的指令。如果你需要帮助,就拿起一本C++书。