https://projecteuler.net/problem=14
我有一个程序,可以计算每个数字的collatz序列的长度。 我尝试使用较小的数字来查看是否是因为我的程序速度太慢,但即使这样程序也永远不会停止。为什么?我只能认为我的while循环永远不会停止,但是应该可以解决这个问题。谢谢。
count = 0
count1 = 0
for n in range(2,10):
count = 0
j = n
while j != 1:
if j%2 == 0:
j = j/2
if j%2 != 0:
j = 3*j+1
count += 1
if count > count1:
count1 = count
print (count1)
答案 0 :(得分:1)
问题源于if
循环中的while
对:
while j != 1:
if j%2 == 0:
j = j/2
if j%2 != 0:
j = 3*j+1
在撰写本文时,条件从未实现。 j
达到值1
的唯一方法是通过第一个if
,但是第二个if
(因为1
是奇数)会立即将其增加到4
,创建一个无限循环。
else
可以解决问题:
while j != 1:
if j % 2 == 0:
j = j / 2
else:
j = 3 * j + 1
count += 1