生成任意位数的磁力数

定义

编辑
任意给一个数字不全相同的n位整数,经过有限次“重排求差”操作(“重排求差”操作即把组成该数的数字重排后得到的最大数减去重排后得到的最小数),最终的运算结果总会得到同一个或同一些n位整数,这类整数好像所有n位整数的核心一样,具有很强的磁性,能够吸引其它n位整数,故称这类整数为磁力数。这类整数又好像宇宙中的黑洞或捕捉猎物的陷阱一样,任何n位整数掉进去就出不来了,故又称这类整数为黑洞数、陷阱数。

数值

编辑
三位数中的磁力数是495。
四位数中的磁力数是6174。
一般地,当自然数n≥2时,如果从0,1,2,…,9中任取n个不完全相同的数字组成一个n位十进制数k0(首位或前几位的数字可以是0),然后从k0开始不断地做K变换,得出k1,k2,...,那么结果会怎样呢?现在已经知道的是:
n=2,只能形成一个循环:(27,45,09,81,63)。
n=3,只能形成一个循环:(495)。
n=4,只能形成一个循环:(6174)。
n=5,只能形成三个循环:(53955,59994),(61974,82962,75933,63954),(62964,71973,83952,74943)。
n=6,已经发现三个循环:(549945),(631764),(420876,851742,750843,840852,860832,862632,642654)。
n=7,已经发现一个循环:(7509843,9529641,8719722,8649432,7519743,8429652,7619733,8439552)。
n=8,已经发现四个循环:(63317664),(97508421),(64308654,83208762,86526432),(43208766,85317642,75308643,84308652,86308632,86326632,64326654)。
n=9,已经发现三个循环:(554999445),(864197532),(753098643,954197541,883098612,976494321,874197522,865296432,763197633,844296552,762098733,964395531,863098632,965296431,873197622,865395432)。

输入任意位数,生成其对应的磁力数字并输出

import math as ma
from collections import Counter


def split(n):       #数字拆分
    numlist = []
    size = (len(str(n)))
    for i in range (size):
        if (n / 10) != 0:
            (n, mod) = divmod(n , 10)
            numlist.append(mod)
    return numlist


def joint(numlist):        #数组组合成数字
    size1 = (len(numlist))
    temp0 = 0
    for i in range(size1):
        temp = numlist[i]*ma.pow(10,(size1-i-1))
        temp0 = temp + temp0
    return temp0

    
def diffvalue(n):     #做差值
    if n< 10:
        return (10*n-n)
    else:
        minl = split(n)
        minl.sort()
        maxl = minl.copy()
        maxl.reverse()
        maxn = joint(maxl)
        minn = joint(minl)
        diff = maxn - minn
        return diff

if __name__ == "__main__":
    x = input('输入各位数不全相同整数:')
    n=eval(x)
    minl = []
    difflist = []
    numdiff = diffvalue(n)
    counter = {}
    lst = []


    while 10 not in counter.values():
        if numdiff == 0:
            break
        else:
            difflist.append(numdiff)
            numdiff = diffvalue(numdiff)
            counter = Counter(difflist)
    

    new_dict = {k:v for k,v in counter.items()}

    for key in new_dict:
        if new_dict[key] > 8:
            lst.append(key)
        
    print("出现的差值及次数集合为:%s"%counter)
    print("磁力数为:%s"%lst)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值