用python解决6147问题!!!

'''
任意给一个四位数(各位数不完全相同),各个位上的数可组成一个最大数和一个最小数,他们的差又能组成一个
最大数和最小数,直到某一步得到的差将会出现循环重复。
例:
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

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Noah Ren

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值