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

时间:2018-06-26 04:06:23

标签: java algorithm

这是我要解决的算法问题(用韩语写。):https://www.acmicpc.net/problem/10944

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

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

我发现用Java生成随机数有两种方法。

  1. 随机
  2. Math.random()

我可以使用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));
    }
}

由于Random参数相同,因此显示相同的结果。我尝试使用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));
    }
}

而且我记得,Math.random()是由系统时间生成的。但是我找不到任何信息。如果是这样,则有可能解决问题。因为我可以使用系统时间进行编程,所以结果将始终保持一致。

1 个答案:

答案 0 :(得分:0)

您的问题与Google身份验证器实施的依据相同。大多数RSA令牌或2factor身份验证都使用此方法对用户进行身份验证。如评论中所述,使用通用种子来解决问题