我正在尝试解决Project Euler 问题 #55,其中指出:
如果我们取 47,反转和相加,47 + 74 = 121,这是回文。
并非所有数字都能如此迅速地产生回文。例如,
349 + 943 = 1292, 1292 + 2921 = 4213, 4213 + 3124 = 7337
也就是说,349 需要 3 次迭代才能得出回文。
尽管还没有人证明这一点,但人们认为有些数字,比如 196,永远不会产生回文。一个永远不会通过反向和加法过程形成回文的数字称为 Lychrel 数。由于这些数字的理论性质,并且为了这个问题的目的,我们将假设一个数字是 Lychrel,直到证明不是这样。此外,您还知道,对于每一个低于一万的数字,它要么(i)在不到 50 次迭代中成为回文,要么(ii)到目前为止,没有人拥有所有的计算能力将其映射到回文。事实上,10677 是第一个被证明需要超过 50 次迭代才能产生回文的数字:4668731596684224866951378664(53 次迭代,28 位)。
令人惊讶的是,有回文数本身就是 Lychrel 数。第一个例子是 4994。
一万以下有多少个 Lychrel 数?
TL;DR:如果一个数字不是回文,则将其添加到自身的反面。仍然没有?重复。...50 次迭代后...这是一个 Lychrel 数。
我的代码:
def isPalindrome(n):
return str(n)[::-1] == str(n)
lychrels = 0
for i in range(1,10000):
lychrel = True
for j in range(50):
if isPalindrome(i):
lychrel = False
break
else:
i += int(str(i)[::-1])
if lychrel:
lychrels += 1
print(lychrels)
它适用于 349(非 Lychrel)和 196(Lychrel)的测试用例,但 Project Euler 拒绝了我得到的答案。
我还没有解决这个问题,所以我更喜欢提示而不是直接解决方案。
我究竟做错了什么?