小码农

趣味编程-面向每个人的创意编程

Python编程算法:黑洞数

avatar 2022-12-02 20:21 474次浏览 0 条评论 Python

【案例内容】

黑洞数又称陷阱数,是指任何一个数字不全相同的三位正整数,在经过有限次的“重排求差”操作后,总会得到495这个数。那么495就是黑洞数。所谓“重排求差”操作,是将组成一个数的各位数字,重新排列后,总会得到一个最大数和最小数,将最大数减去最小数。比如,对三位数207进行“重排求差”操作: 第1次重排求差得:720 – 027 = 693; 第2次重排求差得:963 – 369 = 594; 第3次重排求差得:954 – 459 = 495; 此时,再进行“重排求差”,都会停留在495这一黑洞数。 请用编程求三位数的黑洞数。

 

【解题思路】

根据”黑洞数”的定义,对于任意一个数字不全相同的三位正整数,经过多次”重排求差”操作,最后的结果总会掉入一个黑洞数里,一旦结果是黑洞数,那么无论再重复多少次的”重排求差”,结果都是黑洞数,比如三位数的黑洞数是495,一旦求得结果为495,无论再求几次,结果依然是495。因为由4、9、5三个数组成的最大数和最小数,永远都是954和459,它们相减的结果也永远都是495。对于其他三位正整数而言,也是同样的结果。因此495是三位数的黑洞数。

针对本题,我们可以再次导入itertools包里的permutations文件,利用它可以很方便的获得任何str型的不同排列情况,拿到所有排列情况后,再将它们重新组合成数字,并存入列表中,接着通过max()和min()函数即可得到最大值和最小值,两者相减就是”重排求差”的结果,最后循环比较,如果结果等于495,即可证明495是三位数的黑洞数。

 

【Python代码】

523的黑洞数是495


890的黑洞数也是495
本题巧妙借助了itertools包里的permutations文件,可帮助我们快速找出字符数字的各种排列的情况。只要找到了所有排列情况,后面的重排求差就容易进行,只需利用join()函数、max()函数及min()函数,就能方便得出最大数与最小数的求差结果,同时别忘了字符转数字。

发表评论