java - Project Euler #14 输出的输出不正确

标签 java algorithm collatz

我正在尝试实现算法来解决 Project Euler Problem #14 ,它要求在给定范围内找到一个输出最大 Collat​​z 猜想序列长度的数字。我的代码如下:

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 万的正确序列长度。基于此,我可以假设我的 Collat​​z 猜想算法有效,但比较部分无效。但是,我实在找不到其他可以修改代码的地方。有任何想法吗?谢谢您,请原谅这可能是重复的(没有多少其他帖子有同样的问题)。

最佳答案

哇,问题只是语法错误。看来我没注意:

 if (collatz > totalVal) {}
            greatestNum = i;
            totalVal = collatz;

是的,没有用大括号将代码括起来。

关于java - Project Euler #14 输出的输出不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61996049/

相关文章:

java - 如果 future 在循环内,Java 中的 ExecutorService 会如何表现

java - 获取 ClassCastException

java - 在 Spring 中使用双值验证

java - 强制停止我的包后,Android 正在终止我的前台服务

python - 检查共振条件 - Pythonic/算法改进?

algorithm - 分析我的程序的时间复杂度

c++ - 递归时的段错误

c++ - 在文本中搜索多个字符串之一的有效算法?

python - 使用 python 打印正整数 n 的 collat​​z 序列,每行一个值在 1 处停止

c - 为什么 < 比 != 快得多?