四位数黑洞
【问题】任意给定一个四位数 x,对它的十进制表示字符重新排序,分别获得最大的四位数 a, 最小的四位数 b, a - b 得到新的四位数(如不足4位,前边补 0),再重复这个过程。
最后变成一个数字 m,它不再变化。
求这个不变的数字 m
给定四位数,求它的变化过程。
分析:
问题的核心要解决 数字,字符串,字符序列间的相互转换。
str(数字) ⇒ 串
list(串) ⇒ 字符序列
“”.join(字符序列) ⇒ 串
int(串) ⇒ 数字
def hei_dong(x):
def f(n):
t = list("{:04d}".format(n))
t1 = sorted(t)
t2 = reversed(t1)
return int("".join(t2)) - int("".join(t1))
a = []
while True:
a.append(x)
y = f(x)
if y == x: return a
x = y
if __name__ == '__main__':
print(hei_dong(1502))
print(hei_dong(3))
输出结果:
[1502, 5085, 7992, 7173, 6354, 3087, 8352, 6174]
[3, 2997, 7173, 6354, 3087, 8352, 6174]
可见这个固定的数字是: 6174
需要注意,排序的时候,用 sorted(序列),而不是用 序列.sort()
后者是在序列上就地排序,不是返回新的序列。
需要补基础的,可以看:小甲鱼pyhthon教程,Bilibili站上还有:[耿老师]小甲鱼python作业 解析系列,持续更新中。