作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
最近着迷于寻找 Lychrel 和回文数作为娱乐数学。
对于不知道的人,手动对号码执行此检查的过程如下。
True
,否则返回 False
。重复 n
作为新的 x
,直到获得 True
。
有没有办法在 Python 中自动执行此操作?我可以在其中输入一个数字,它会告诉我它的倒数之和是否是回文。此外,我想看看达到这个数字需要多少步。
例子:
令 x 为 79。79 + 97 为 176,这不是回文,因此我们得到 False
。
现在设 x 为 176。176 + 671 为 847,这不是回文,所以我们得到 False
。
我们继续:
这是我们最终遇到回文的地方。共 6 个步骤。
最佳答案
首先,定义两个方便的函数(你可以自己做!):
def is_palindrome(number):
"""Whether the number is a palindrome."""
raise NotImplementedError
def reverse(number):
"""The number reversed, e.g. 79 -> 97."""
raise NotImplementedError
然后我们可以创建一个generator产生您描述的一系列数字:
def process(number):
"""Create the required series of numbers."""
while True:
yield number
if is_palindrome(number):
break
number += reverse(number)
例如:
>>> list(process(79))
[79, 176, 847, 1595, 7546, 14003, 44044]
# 0 1 2 3 4 5 6
确定一个数是否是 Lychrel 数比较棘手 - 显然,当我们的生成器用完时,判断它是否是微不足道的:
def is_lychrel(number):
"""Whether the number is a Lychrel number."""
for _ in process(number):
pass
return False
你可以测试我们是否重复一个数字(如果有一个循环,它永远不会到达回文):
def is_lychrel(number):
"""Whether the number is a Lychrel number."""
seen = set()
for num in process(number):
if num in seen:
return True
seen.update((num, reverse(num))) # thanks @ReblochonMasque
return False
否则它会一直持续到内存不足!
关于python - 利克瑞尔数算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32336039/
我是一名优秀的程序员,十分优秀!