import java.util.Scanner;
public class NeumannsRandomGenerator {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Enter cases:");
int cases = in.nextInt();
int iterations = 0;
for (int i = 0; i <= cases; i++) {
int a = in.nextInt();
int res = ((a * a) / 100) % 10000;
if(res == a){
iterations++;
}
do {
int b = ((res * res) / 100) % 10000;
iterations++;
b = res;
} while (a != res);
System.out.println(iterations);
}
}
}
我试图想象Neumans随机发生器 例如:
5761 - 让它成为第一个数字 5761 * 5761 = 33189121 - 提高功率2 1891年 - 它是序列中的第二个数字
1891 * 1891 = 3575881 - 上升到2(加上前导零到8位)
03(5758)81 =&gt; 5758 - 截断以获得中间
5758 - 它是序列中的第三个数字(依此类推......)
请帮助我为什么没有得到任何结果:(
答案 0 :(得分:0)
我不知道迭代的规则,你的号码被填充为0315.如果填充值为00099225,结果数字为992,那么这将是一个良好的开端。我也没有看到你重新生成的规则,所以它只是递归。
我很快就这样做了,所以这里可能会有一些不必要的代码
public int getNeumansRandomNumber(int starting) {
int nsquared = (int) Math.pow(starting, 2);
int length = String.valueOf(nsquared).length();
if (length < 8) {
String zeroPad = "00000000";
String padded = zeroPad.substring(length) + nsquared;
System.out.println("padded="+padded);
nsquared = Integer.valueOf(padded);
}
int middle = (nsquared % 1000000) / 100;
System.out.println(middle);
return getNeumansRandomNumber(middle);
}