python寻找黑洞数

问题:
黑洞数是指这样的正整数n:由n的每位数字打乱重组成的最大数减去每位数字打乱重组成的最小数仍然得到这个数自身。例如495,因为954-459=495,所以495是黑洞数;又又例如6174,因为7641-1467=6174,所以6174是黑洞数。请编写Python程序从键盘读入一个正整数n,输出小于等于正整数n的所有黑洞数,提交你的Python程序。
【输入要求】
(1)input语句不能有任何提示信息;
(2)程序需要考虑输入数据不是正整数的问题并进行妥善处理。

【输出要求】
(1)如果从键盘输入的数据不能转换为正整数,则输出字符串"ERROR";
(2)如果键盘输入的数据能转换为正整数n,则输出所有满足条件的黑洞数,输出时按从小到大的顺序输出,每个黑洞数单独占一行;
(3)如果找不到黑洞数,则输出字符串"没找到";
(4)不能输出任何多余的信息。

参考GPT和自己 的思路,以下是实现此功能的Python代码:

def is_blackhole_number(num):
    """
    判断一个数是否为黑洞数
    """
    max_num = int(''.join(sorted(str(num), reverse=True)))
    min_num = int(''.join(sorted(str(num))))
    return max_num - min_num == num

# 获取用户输入
try:
    n = int(input())
except:
    print("ERROR")
    exit()

# 查找所有小于等于n的黑洞数
found = False
for i in range(1, n+1):
    if is_blackhole_number(i):
        print(i)
        found = True

if not found:
    print("没找到")

此代码中的is_blackhole_number()函数用于判断一个数是否为黑洞数。它接受一个整数作为输入,然后找到该数字的最大值和最小值,计算它们的差,并返回该差是否等于原数字。

主程序从键盘读入一个正整数n,并在1到n范围内搜索黑洞数。如果找到了任何黑洞数,则将它们逐行打印出来。否则,输出“没找到”。

如果用户输入无法转换为整数,则程序将输出“ERROR”。

回答不易,还请采纳!!!


# -*- coding:utf-8 -*-
import math

def Black(num):
    B_num = []
    L = int(math.pow(10,num-1))
    R = int(math.pow(10,num))
    for i in range(L,R):
        list1 = list(map(str,str(i)))

        list1.sort()
        list_min = list1[:]
        # 去除首位为0的元素
        while list_min[0] == '0':
            del list_min[0]

        list1.sort(reverse=True)
        list_max = list1[:]
#        化为整数
        num_min= eval(''.join(list_min))
        num_max = eval(''.join(list_max))

        res = num_max - num_min
        if res == i:
            print(i)

num = eval(input("要计算几位的黑洞数?"))
Black(num)

该回答引用GPTᴼᴾᴱᴺᴬᴵ
以下是一个Python程序实现寻找黑洞数的功能。其中使用了try-except语句来判断输入的数据是否能够转换为正整数,并在无法转换时输出"ERROR"。如果输入的数据能够转换为正整数,则程序通过一个while循环来遍历小于等于n的所有数,并对每个数进行黑洞数判断。如果找到了黑洞数,则输出该数并将该数从待判断的数中删除,继续判断下一个数,直到所有数都被判断过。如果无法找到黑洞数,则输出"没找到"。

try:
    n = int(input())
except:
    print("ERROR")
else:
    def get_max_num(num):
        digits = sorted(list(str(num)), reverse=True)
        return int(''.join(digits))

    def get_min_num(num):
        digits = sorted(list(str(num)))
        return int(''.join(digits))

    candidates = list(range(1, n+1))
    black_holes = []
    while candidates:
        num = candidates.pop(0)
        while True:
            max_num = get_max_num(num)
            min_num = get_min_num(num)
            num_diff = max_num - min_num
            if num_diff == num:
                black_holes.append(num)
                break
            elif num_diff in black_holes:
                break
            else:
                num = num_diff
        if num > n:
            break

    if black_holes:
        for num in sorted(black_holes):
            print(num)
    else:
        print("没找到")


注意,题目中要求输出的黑洞数是按从小到大的顺序输出的,因此程序在输出时使用了sorted(black_holes)来对黑洞数进行排序。

img

img

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^