求4位数的黑洞数

        黑洞数又称陷阱数,是类具有奇特转换特性的整数。任何一个数字不全相同整数,经有限“重排求差”操作,总会得某一个或一些数,这些数即为黑洞数。“重排求差”操作即把组成该数的数字重排后得到的最大数减去重排后得到的最小数。或者是冰雹原理中的“1”黑洞数。

        随便造一个四位数,如a₁=5463,先把组成部分5463的四个数字由大到小排列得到a2=6543,再把5463的四个数字由小到大排列得a₃=3456,用大的减去小的a₂-a₃=6543-3456=3087,把3087按上面的方法再作一遍,由大到小排列得8730,由小到大排列得0387,相减8730-0387=8352,把8352再重复一遍:8532-2358=6174。如果再往下作,奇迹就出现了!7641-1467=6174,又回到6174。这个6174即为四位数的黑洞数。

代码如下:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @desc: 黑洞数
# 求四位数组合的最大值
def three_max(a, b, c, d):  # a、b、c、d分别对应千位、百位、十位、个位
    list = [a, b, c, d]
    list.sort()
    a, b, c, d = list[3], list[2], list[1], list[0]
    return a * 1000 + b * 100 + c * 10 + d


# 求四位数组合的最小值
def three_min(a, b, c, d):  # a、b、c、d分别对应千位、百位、十位、个位
    list = [a, b, c, d]
    list.sort()
    a, b, c, d = list[0], list[1], list[2], list[3]
    return a * 1000 + b * 100 + c * 10 + d


# 求最大最小值
def max_min(j):
    tho = j // 1000
    hun = j % 1000 // 100  # 百位
    ten = j % 100 // 10  # 十位
    bit = j % 10  # 个位
    max = three_max(tho, hun, ten, bit)  # 最大值
    min = three_min(tho, hun, ten, bit)  # 最小值
    return max, min


# 求黑洞数
def black_number(max, min):
    j = max - min
    k = 0
    while k < min:  # k控制循环次数
        h = j  # h记录上一次最大值与最小值的差
        max, min = max_min(j)
        j = max - min
        if j == h:  # 最后两次差相等时,差即为所求黑洞数
            print("%d " % j)
            break  # 跳出循环
            k += 1


if __name__ == "__main__":
    i = int(input("请输入一个四位整数:"))
    max, min = max_min(i)
    print("max = ", max)
    print("min = ", min)
    black_number(max, min)

随便输入一个不完全相同的四位数,运行 结果如下:

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值