6174猜想
6174猜想 ,1955年,卡普耶卡(D.R.Kaprekar)研究了对四位数的一种变换:任给出四位数k0,用它的四个数字由大到小重新排列成一个四位数m,再减去它的反序数rev(m),得出数k1=m-rev(m),然后,继续对k1重复上述变换,得数k2.如此进行下去,卡普耶卡发现,无论k0是多大的四位数, 只要四个数字不全相同,最多进行7次上述变换,就会出现四位数6174
个人想法
一个组成最大值的方法
一个组成最小值的方法
最后计算
代码
用的是python,刚学python欢迎大神指点,小白出品:
#返回组成最小的四位数
def minnum(min_n):
n1 = int(min_n/1000)
n2 = int(min_n/100 % 10)
n3 = int(min_n/10 % 10)
n4 = int(min_n % 10)
num_l = [n1, n2, n3, n4]
for i in range(4):
for j in range(i, 4):
if num_l[i] > num_l[j]:
a = num_l[i]
num_l[i] = num_l[j]
num_l[j] = a
return num_l[0]*1000+num_l[1]*100+num_l[2]*10+num_l[3]
#返回组成最大的四位数
def maxnum(max_n):
n1 = int(max_n / 1000)
n2 = int(max_n / 100 % 10)
n3 = int(max_n / 10 % 10)
n4 = int(max_n % 10)
num_l = [n1, n2, n3, n4]
for i in range(4):
for j in range(i, 4):
if num_l[i] < num_l[j]:
a = num_l[j]
num_l[j] = num_l[i]
num_l[i] = a
return num_l[0] * 1000 + num_l[1] * 100 + num_l[2] * 10 + num_l[3]
#用集合去除重复,求剩余元素
def judge(num1):
nu1 = {int(num1/1000), int(num1/100 % 10), int(num1/10 % 10), int(num1 % 10)}
return len(nu1)
#计算
def operation(nus):
if judge(nus) == 4:
for item in range(7):
print(maxnum(nus), '-', minnum(nus), '=', maxnum(nus)-minnum(nus))
if maxnum(nus) - minnum(nus) == 6174:
print('第', item+1, '次找出')
break
else:
nus = maxnum(nus)-minnum(nus)
else:
print('你输入了重复的四位数了')
if __name__ == '__main__':
print('请输入不重复的四位数:')
num = int(input())
operation(num)