Project Euler #14 输出的输出不正确
Incorrect output for Project Euler #14 output
我正在尝试实现求解 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;
是的,没有用大括号括起代码。
我正在尝试实现求解 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;
是的,没有用大括号括起代码。