我正在尝试实现算法来解决 Project Euler Problem #14 ,它要求在给定范围内找到一个输出最大 Collatz 猜想序列长度的数字。我的代码如下:
import java.util.ArrayList;
class Collatz {
private static ArrayList<ArrayList<Long>> previousNums = new ArrayList();
public static int seqLen(int x) {
ArrayList<Long> colSeq = new ArrayList();
long val = x;
colSeq.add(val);
while (val > 1) {
if (val%2 == 0) {
val/=2;
if (val < previousNums.size()) /*used to check if index exists*/{
colSeq.addAll(previousNums.get((int)val));
break;
}
else colSeq.add(val);
}
else {
val = 3*val + 1;
if (val < previousNums.size()) {
colSeq.addAll(previousNums.get((int)val));
break;
}
else colSeq.add(val);
}
}
previousNums.add(colSeq);
return colSeq.size();
}
public static void main(String[] args) {
int greatestNum = 0;
long totalVal = 0;
for (int i = 0; i<=1000000; i++) {
int collatz = seqLen(i);
if (collatz > totalVal) {}
greatestNum = i;
totalVal = collatz;
}
System.out.println(greatestNum + " " + totalVal);
}
}
我得到的输出是
1000000 153
虽然这不是正确答案,但 153 是 100 万的正确序列长度。基于此,我可以假设我的 Collatz 猜想算法有效,但比较部分无效。但是,我实在找不到其他可以修改代码的地方。有任何想法吗?谢谢您,请原谅这可能是重复的(没有多少其他帖子有同样的问题)。
最佳答案
哇,问题只是语法错误。看来我没注意:
if (collatz > totalVal) {}
greatestNum = i;
totalVal = collatz;
是的,没有用大括号将代码括起来。
关于java - Project Euler #14 输出的输出不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61996049/