1955年,卡普耶卡(D.R.Kaprekar)对4位数字进行了研究,发现一个规律:对任意各位数字不相同的4位数,使用各位数字能组成的最大数减去能组成的最小数,对得到的差重复这个操作,最终会得到6174这个数字,并且这个操作最多不会超过7次。
我们将从string库中调用digits函数随机生成数字,以及itertools库中调用combinations函数生成所有可能的长度为r的子序列组合,然后用sorted函数进行排序。
from string import digits
from itertools import combinations
for item in combinations(digits, 4):
times = 0
while True:
# 当前选择的4个数字能够组成的最大数和最小数
big = int(''.join(sorted(item, reverse=True)))
little = int(''.join(sorted(item)))
difference = big-little
times = times+1
# 如果最大数和最小数相减得到6174就退出
# 否则就对得到的差重复这个操作
# 最多7次,总能得到6174
if difference==6174:
print("该理论正确")
if times>7:
print(times)
break
else:
item = str(difference)

可见理论是正确的。
4041

被折叠的 条评论
为什么被折叠?



