1

我正在尝试解决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 拒绝了我得到的答案。

还没有解决这个问题,所以我更喜欢提示而不是直接解决方案。

我究竟做错了什么?

4

1 回答 1

4

您对一个以回文开头的数字不是 lychrel 做出了错误的假设。我认为这是你唯一的错误。

于 2013-05-03T19:55:43.883 回答