我正致力于解决第14个项目的欧拉分配。
这是作业:
为正整数集定义以下迭代序列: n→n / 2(n是偶数) n→3n + 1(n为奇数) 使用上面的规则并从13开始,我们生成以下序列: 13→40→20→10→5→16→8→4→2→1 可以看出,该序列(从13开始并在1结束)包含10个项。虽然尚未证实(Collatz问题),但据认为所有起始数字都是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");
}
}
}
}
}
现在,这是我的问题。每次我运行程序时,都会打印出#34;偶数:6&#34;一遍又一遍地。如果它是偶数,它应该将它除以一半。
有没有人认出我的代码存在任何问题?
答案 0 :(得分:1)
你的问题在这里:
Number = i / 2;
应该是:
Number = Number / 2;
您希望将当前数字减半,而不是将数字设置为等于起始数字除以2。
答案 1 :(得分:1)
这是因为if
循环中的以下while
条件:
if (Number % 2 == 0) {
Number = i / 2;
System.out.println("Even: " + Number);
}
此处,number为assigne i/2
值,结果为6
,然后,它永远不会更改,从而导致无限循环。
将Number = i / 2;
更改为Number = Number / 2;
应该这样做。