尝试解决项目欧拉分配时出错

Error while attempting to solve project euler assignment

我正在解决第 14 个项目欧拉作业。

这是作业:

为正整数集定义了以下迭代序列: n → n/2(n 为偶数) n → 3n + 1(n 为奇数) 使用上面的规则并从 13 开始,我们生成以下序列: 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 可以看出,这个序列(从 13 开始到 1 结束)包含 10 个项。尽管尚未证明(Collat​​z Problem),但认为所有起始数字都以 1 结尾。 哪个起始数字(低于一百万)产生最长的链? 注意:一旦链开始,条款就可以超过一百万.

这是我的代码:

package collatzSequence;

public class CollatzSeq {

    public static void main(String[] args) {
        int count = 0;
        int largestCount = 0;

        for (int i = 13; i < 1000000; i++) {
            // System.out.println(i);
            int Number = i;

            while (Number > 1) {
                count = 0;

                if (Number % 2 == 0) {
                    Number = i / 2;
                    System.out.println("Even: " + Number);
                } else {
                    Number = (Number * 3) + 1;
                    System.out.println("Uneven: " + Number);
                }
                count+=1;

                if (count > largestCount) {
                    largestCount = count;
                    System.out.println("New largest found");
                }

            }

        }

    }

}

现在,这是我的问题。每次我 运行 程序,它都会一遍又一遍地打印 "Even: 6" 。如果它是偶数,它应该将它除以一半。

有人发现我的代码有问题吗?

您的问题在这里:

Number = i / 2;

应该是:

Number = Number / 2;

您想将当前数字减半,而不是将数字设置为 起始 数字除以 2。

这是因为 while 循环中的以下 if 条件:

if (Number % 2 == 0) {
     Number = i / 2;
     System.out.println("Even: " + Number);
}

在这里,number 被赋值 i/2 值,导致 6 然后,它永远不会改变,导致无限循环。

Number = i / 2; 更改为 Number = Number / 2; 应该可以。