青岛IT培训的小编总结, 第五题:黑洞数
黑洞数又称陷阱数,是类具有奇特转换特性的整数。任何一个数字不全相同的整数,经限“重排求差”操作,总会得到某一个或一些数,这些数即为黑洞数。“重排求差”操作即把组成该数的数字重排后得到的最大数减去重排后得到的最小数。
举个例子,3位数的黑洞数为495.
简易推导过程:随便找个数,如297,3个位上的数从小到大和从大到小各排一次,为972和279,相减得693.按上面做法再做一次,得到594,再做一次,得到495,之后反复都得到495.
验证4位数的黑洞数为6174.
解题思路:
对所有四位数进行如下操作:将数字分解存入列表,列表排序,组合成数字,然后大小相减,对比6174相等则验证成功
列表排序相关函数:
#将列表中元素反转排序
>>> x = [1,5,2,3,4]
>>> x.reverse()
>>> x
[4, 3, 2, 5, 1]
#此函数方法对列表内容进行正向排序,排序后的新列表会覆盖原列表(id不变),也就是sort排序方法是直接修改原列表list排序方法。

>>> a = [5,7,6,3,4,1,2]
>>> a.sort()
>>> a
[1, 2, 3, 4, 5, 6, 7]
#即可以保留原列表,又能得到已经排序好的列表sorted()操作方法如下:
>>> a = [5,7,6,3,4,1,2]
>>> b = sorted(a)
>>> a
[5, 7, 6, 3, 4, 1, 2]
>>> b
[1, 2, 3, 4, 5, 6, 7]
本来根据我的思路大致写了一下代码如下
def number_x(num,other):
list_num = []
while num > 0:
a = num % 10
num = int( num / 10 )
list_num.append(a)
if other == 'min':
list_min = sorted(list_num)
num_min = list_min[0] + list_min[1] * 10 + list_min[2] * 100 + list_min[3] * 1000
return num_min
elif other == 'max':
list_min = sorted(list_num)
list_max = sorted(list_min)
num_max = list_max[0] + list_max[1] * 10 + list_max[2] * 100 + list_max[3] * 1000
return num_max
for i in range(1000,10000):
x = i
a = 0
while x != 6174:
x_min = number_x(x,'min‘)
x_max = number_x(x,'max’)
x = x_max - x_min
a += 1
if a == 1000:
print(‘fail',i)
break
print('success’)
以上就是青岛IT培训给大家做的内容详解,更多关于UI的学习,请继续关注青岛IT培训