朝看晨曦,暮浴夕阳,春来赏花,秋望水长。
一、黑洞数含义
任何一个数字不全相同整数,经有限“重排求差”操作,总会得某一个或一些数,这些数即为黑洞数。“重排求差”操作即把组成该数的数字重排后得到的最大数减去重排后得到的最小数。--摘自百度百科
关键字:有限操作、固定数、最大数减去最小数
二、思路
1.随便找一个数字不全相同的4位整数 2.把该整数的每一位存入到列表1中 3.对列表1进行排序,找出最小值存到变量1中 4.反转列表1,找到最大值存到变量2中 5.计算二者差值,存到列表2中,该列表存储每一次的差值 6.如果在新列表中该差值出现两次,那么就说明该差值就是要找的四位黑洞数
三、代码
#!/usr/bin/python3.7.6
# author:小海
# content:四位黑洞数
num = int(input("请输入一个四位整数(不能每位都相同),用于找出四位黑洞数:"))
list = [] #存放用于找出黑洞数的整数的每一位
list2 = [] #存放某一步计算的差值数,这样,只要同一个差值数出现两次就能说明找到黑洞数
def weiShu(n): #求出一个整数的每一位
while n > 0:
bit = n % 10;list.append(bit) #将每一位存入到列表中
n //= 10
weiShu(num)
def blackHoleNumber():
global num
index = -1
# index用以统计找了几次,因为需要先把每一步的差值放到列表中,下一次在比对,如果成功,代表上一次其实已经找到
#所以需要从index = -1 开始
while list2.count(num)!=2:#相同差值出现两次及以上才能说明找到该黑洞数
s=""
list.sort()
for i in list:
s += str(i)
s = int(s) #拿到最小值
print("s = :%d " % s)
x =""
list.reverse()
for i in list:
x += str(i)
x = int(x) #拿到最大值
print("x = :%d " % x)
num = x - s
list2.append(num)
index += 1 #运行到这代表找了一次,找的次数加一
list.clear() #每次取出一个整数的每位时,要清空列表,这样不会影响下一次使用
weiShu(num)
print("一共找了 %d 次" % index)
print("四位黑洞数是: %d " % num)
blackHoleNumber()
四、测试
请输入一个四位整数(不能每位都相同),用于找出四位黑洞数:4532
s = :2345
x = :5432
s = :378
x = :8730
s = :2358
x = :8532
s = :1467
x = :7641
一共找了 3 次
四位黑洞数是: 6174
Process finished with exit code 0