python3 题解(19 四位数黑洞)

四位数黑洞

【问题】任意给定一个四位数 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作业 解析系列,持续更新中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值