python3求四位磁力数

 

任意给一个数字不全相同的n位数,经有限次“重排求差”操作(“重排求差”操作即把该数的数字重排后得到的最大数减去重排后得到的最小数)最终的运算结果总会得到同一或同一些n位整数,这类整数好像所有n位整数的核心一样,具有很强的磁性,能够吸引其它n位整数,故这类整数为磁力数。

 1 def split (n, numberlist):
 2     numberlist.clear()
 3     while (n > 0):
 4         mod = n % 10
 5         n = int( n / 10 )
 6         numberlist.append(mod)
 7 
 8 def bubbleSort (numlist, len):
 9     for i in range(len):
10         for j in range(len-i-1):
11             if numlist[j] < numlist[j+1]:
12                 tmp = numlist[j]
13                 numlist[j] = numlist[j+1]
14                 numlist[j+1] = tmp
15 
16 def reverse(a, k):
17     for i in range(int(k/2)):
18         t = a[i]
19         a[i] = a[k-1-i]
20         a[k-1-i] = t
21 
22 def combine(a, k):
23     m = a[3] + a[2] * 10 + a[1] * 100 + a[0] * 1000
24     return m
25 
26 inputStr = input('输入一个数字完全不相同的四位数字(1000·9999)')
27 length = len(inputStr)
28 if length != 4:
29     print("input number is invalid")
30     exit()
31 inputNumber = eval(inputStr)
32 tarNumber = 6174
33 numberlist = []
34 while(inputNumber != tarNumber):
35     split(inputNumber, numberlist)
36     bubbleSort(numberlist, length)
37     maxNum = combine(numberlist, length)
38     reverse(numberlist, length)
39     minNum = combine(numberlist, length)
40     inputNumber = maxNum - minNum
41     print('%d-%d=%d/n' % (maxNum, minNum, inputNumber))

使用python中列表中的sort()和reverse()函数来替换掉上述程序中的冒泡排序和逆转列表中的bubbleSort (numlist, len)和reverse(a, k)。

 1 def split (n, numberlist):
 2     numberlist.clear()
 3     while (n > 0):
 4         mod = n % 10
 5         n = int( n / 10 )
 6         numberlist.append(mod)
 7 
 8 def combine(a, k):
 9     m = a[3] + a[2] * 10 + a[1] * 100 + a[0] * 1000
10     return m
11 
12 inputStr = input('输入一个数字完全不相同的四位数字(1000·9999)')
13 length = len(inputStr)
14 if length != 4:
15     print("input number is invalid")
16     exit()
17 inputNumber = eval(inputStr)
18 tarNumber = 6174
19 numberlist = []
20 while(inputNumber != tarNumber):
21     split(inputNumber, numberlist)
22     numberlist.sort(reverse = True)
23     maxNum = combine(numberlist, length)
24     numberlist.reverse()
25     minNum = combine(numberlist, length)
26     inputNumber = maxNum - minNum
27     print('%d-%d=%d/n' % (maxNum, minNum, inputNumber))
原文地址:https://www.cnblogs.com/wxlblogs/p/7130342.html