'''
任意给一个四位数(各位数不完全相同),各个位上的数可组成一个最大数和一个最小数,他们的差又能组成一个
最大数和最小数,直到某一步得到的差将会出现循环重复。
例:
3100-0013=3087
8730-0378=8352
8532-2358=6147
7641-1467=6147
'''
题目如上⬆️
前段时间有个朋友问了我这个问题,当时看到的第一眼就觉得头大,看到数学就懵逼,然后也没有帮他写出来,直到刚才,这哥们还在不断的为这个问题努力,我就想,我也试试吧,人家为了一个问题都可以这么努力,为什么我连尝试的勇气都没有,等到真的去写的时候发现,我能做到。可能实现的不算完美,但是我做到了!有时候面对一个困难,你不是无法克服,你只是觉得自己无法克服然后就退缩了。希望当你看到这段话的时候也勇敢一些,再次面对问题时多尝试几次真的不行了再说自己做不到!
能力有限只能做到手动查找一个四位数是否为6147数。希望大佬可以帮忙改进找出自动打印所有6147数的办法。
下面是代码⤵️
def max_num(num):
'''
将输入的数组合出最大数
'''
num_max = [] # 定义空列表便于sort排序
num = str(num) # 整型没有len方法,所以必须转为字符串类型
if len(num) != 4: # 输入数字不是四位数直接结束
return False
for i in num: # 将输入的数的每一位循环取出,放入列表排序
num_max.append(i)
num_max.sort(reverse=True) # 因为是取最大值,所以要reverse
num = ''.join(num_max) # 重新拼接为字符串
return num
def min_num(num):
'''
将输入的数组合出最小数
'''
num_max = [] # 参考max_num里面的注释
num = str(num)
if len(num) != 4:
return False
for i in num:
num_max.append(i)
num_max.sort()
num = ''.join(num_max)
return num
while True:
num = int(input('输入一个四位数 >>:')) # 输入一个四位数,如果打印信息为6147,则该数为6147数,否则不是
while True:
res = int(max_num(num)) - int(min_num(num))
if res == num:
print(num)
break
else:
num = res
continue