Python编程基础题(16-数字黑洞)

Description
给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。 例如,我们从6767开始,将得到
在这里插入图片描述
现给定任意 4 位正整数,请编写程序演示到达黑洞的过程。

Input
输入给出一个 (0,10^​4) 区间内的正整数 N。

Output
如果 N 的 4 位数字全相等,则在一行内输出 N - N = 0000;否则将计算的每一步在一行内输出,直到 6174 作为差出现,输出格式见样例。注意每个数字按 4 位数格式输出。
在这里插入图片描述
参考程序

def NewOrder(a):#a是字符串
    table=[0 for i in range(10)]
    for i in range(4):
        table[int(a[i])]+=1
    up=""
    down=""
    for i in range(10):
        if table[i]!=0:
            up+=str(i)*table[i]
    for i in range(1,11):
        if table[-i]!=0:
            down+=str(10-i)*table[-i]
    return (int(down),int(up))

def transN(n):
    if len(n)<4:
        n="0"*(4-len(n))+n
    return n

def JudgeEqual(a):
    flag=1
    for i in range(1,len(a)):
        if a[i]==a[0]:
            continue
        else:
            flag=0
            break
    if flag==1:
        return True
    else:
        return False
N=input()
N=transN(N)
if JudgeEqual(N)==True:
    print("{0} - {0} = 0000".format(N))
else:
    while True:
        high,low=NewOrder(N)[0],NewOrder(N)[1]
        if high-low==6174:
            print("{0:04d} - {1:04d} = {2:04d}".format(high,low,high-low))
            break
        else:
            print("{0:04d} - {1:04d} = {2:04d}".format(high,low,high-low))
            N=str(high-low)

注:
本题为PAT (Basic Level) Practice1019题。在对N的每一位进行递增或递减“排序”时,这里使用桶排序思路,因每一位都是0~9的取值,所以可以考虑使用桶排序。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值