Java - 我怎么知道哪个数字是由 Math.rand() 或 Random 生成的?



这是我正在尝试解决的一个算法问题(它是用韩语写的(: https://www.acmicpc.net/problem/10944

如果我简单地翻译问题,我需要生成一个介于 1 到 10,000 之间的数字。结果数字必须与服务器(裁判(生成的随机数相同

这可能吗?我能猜到系统服务器会生成什么吗,我可以将其与程序的结果相匹配吗?

我发现在Java中有两种方法可以制作随机数。

  1. 随机
  2. Math.random((

我可以用随机操纵(或预定义(结果。我只是认为有可能解决这个问题。

例如:

import java.io.IOException;
import java.util.Random;
public class Solution {
public static void main(String[] args) throws IOException {
Random rnd = new Random(1);
System.out.println(rnd.nextInt(10000));
rnd = new Random(1);
System.out.println(rnd.nextInt(10000));
}
}

它显示相同的结果,因为随机的参数相同。我尝试了随机。但我无法解决这个问题。

喜欢这个:

import java.io.IOException;
import java.util.Random;
public class Solution {
public static void main(String[] args) throws IOException {
Random rnd = new Random(1);
System.out.println(rnd.nextInt(10000));
}
}

我记得,Math.random(( 是由系统时间生成的。但我找不到任何信息。如果这是真的,也许可以解决问题。因为我可以用系统时间编程,结果总是对应的。

您的问题与Google身份验证器实现具有相同的基础。大多数 RSA 令牌或 2 因素身份验证都使用此方法对用户进行身份验证。如评论中所述,使用通用种子解决问题

最新更新