使用枚舉法驗證 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)
若不想枚舉,隻想驗證某位四位數可将代碼中注釋部分改為非注釋部分。
因為是枚舉法,最後運作結果數量很多,此處隻截一部分圖。