我正在尝试解决Project Euler problem #55,其中指出:
如果我们采取47,反向并添加,47 + 74 = 121,这是回文。
并非所有数字都如此迅速地产生回文。例如,
349 + 943 = 1292,1292 + 2921 = 4213,4213 + 3124 = 7337
也就是说,349花了三次迭代才到达回文。
虽然还没有人证明这一点,但据认为有些数字, 像196,永远不会产生回文。一个永远不会形成的数字 回文中的回文和添加过程称为Lychrel 数。由于这些数字的理论性质,并为 这个问题的目的,我们假设一个数字是Lychrel 直到证明不然。此外,每个人都可以获得 数字低于一万,它将(i)成为一个回文 少于五十次迭代,或者(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拒绝了我得到的答案。
我尚未尚未解决问题,所以我希望提示而非直接解决方案。
我做错了什么?
答案 0 :(得分:4)
你做出一个错误的假设,假设一个数字开始作为回文而不是lychrel。我认为这是你唯一的错误。