【趣味学算法】11_黑洞数

注: 本系列仅为个人学习笔记,学习内容为《算法小讲堂》(视频传送门),通俗易懂适合编程入门小白,需要具备python语言基础,本人小白,如内容有误感谢您的批评指正

黑洞数又称陷阱数,是指任何一个数字不全相同的整数,在经过有限次“重排求差”操作后,总会得到某一个或某一些数,这些数即为黑洞数。

“重排求差”操作是将组成一个数的各位数字重排,将得到的最大数减去最小数
例如,207的重排求差操作序列是:720-027=693, 963-369=594, 954-459=495,此时再进行重排求差操作将不会发生改变。
再用208计算一次:820-028=792, 972- 279=693,963-369=594,954-459=495,也是停止到495,所以495是三位黑洞数。
根据上面的的操作可以得出对于任意一个数字不完全相同的整数,最后结果总会陷入黑洞圈或黑洞数里,最后结果一旦为黑洞数之后无论重复多少次重排求差结果都是一样的,因此可以通过判断连续的两次结果是否相等来作为黑洞数的依据。

那么要找出所有三位的黑洞数应该如何实现呢?

代码实现思路如下:

  1. 将任意三位数拆分
  2. 拆分后的数重新组合得到最大值和最小值并求差
  3. 将差值结果暂存到临时变量中
  4. 将差值继续拆分重组求差
  5. 判断当前差值与上一差值是否相等,相等结束,不相等循环以上步骤

代码实现如下:

def Rearrange_the_difference(i):
    a = i//100
    b = i%100//10
    c = i%10
    if a < b:
        t = a
        a = b
        b = t
    if b < c:
        t = b
        b = c
        c = t
    if a < c:
        t = a
        a = c
        c = t
    max = a*100+b*10+c
    min =c*100+b*10+a
    print('max={},min={}'.format(max,min))
    return max-min

if __name__ == '__main__':
    h = 0
    i = int(input('请输入一个各位不完全相同三位整数:'))
    h = Rearrange_the_difference(i)
    while h > 0:
        last = h
        h = Rearrange_the_difference(h)
        if h == last:
            print('黑洞数:{}'.format(h))
            break

测试结果如下

请输入一个各位不完全相同三位整数:709
max=790,min=97
max=963,min=369
max=954,min=459
max=954,min=459
黑洞数:495
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值