使用枚举法验证 6174猜想:
1955年,卡普耶卡(D.R.Kaprekar)对4位数字进行了研究,发现一个规律:对任意各位数字不相同的4位数,使用各位数字能组成的最大数减去能组成的最小数,对得到的差重复这个操作,最终会得到6174这个数字,并且这个操作最多不会超过7次。
使用语言: Python
思路: 对于每一个四位数,将其各个位数放入一个列表中,此列表升序后拼成的数字为最小数,此列表降序后拼成的数字为最大数。利用循环,反复进行操作;差不等于6174则将其分解放入列表中,求得最大小值后相减得差。
!此猜想只针对各位数字不相同的4位数
代码:
def sws(l): #将列表中数按顺序组成四位数
y=l[0]*1000+l[1]*100+l[2]*10+l[3]
return y
def jian(l): #最大数-最小数
l.sort()
n1=sws(l)
l.sort(reverse=True)
n2=sws(l)
t=(n2-n1)
return t
def f(n): #将四位数各位取出放入列表
x=n//1000
y=n//100%10
z=n%100//10
m=n%10
l=[]
l.append(x)
l.append(y)
l.append(z)
l.append(m)
return l
def jd(x):
l=f(x)
#for i in range(0,4):
# x=int(input())
# l.append(x)
a=jian(l)
i=1
while(a!=6174):
a=jian(f(a))
i+=1
if i<8:
print(x,"最终得到6174操作次数:",i)
else:
print(x,"最终得到6174这个数字的操作超过7次。")
for x in range(1000,10000):
l=f(x)
if l[0]!=l[1] and l[0]!=l[2] and l[0]!=l[3]and l[1]!=l[2]and l[1]!=l[3]and l[2]!=l[3]:
jd(x)
若不想枚举,只想验证某位四位数可将代码中注释部分改为非注释部分。
因为是枚举法,最后运行结果数量很多,此处只截一部分图。