2024.5.11

liuxuechao發表於2024-06-13
8-3 【Python0004】驗證6174猜想
分數 10
作者 doublebest
單位 石家莊鐵道大學

【題目描述】1955年,卡普耶卡(D.R.Kaprekar)對4位數字進行了研究,發現一個規律:對任意各位數字不相同的4位數,使用各位數字能組成的最大數減去能組成的最小數,對得到的差重複這個操作,最終會得到6174這個數字,並且這個操作最多不會超過7次。請編寫程式驗證這個猜想。
【練習要求】請給出原始碼程式和執行測試結果,原始碼程式要求新增必要的註釋。
【輸入格式】在一行中輸入一個任意各位數字不相同的4位數。
【輸出格式】驗證6174猜想,輸出過程中計算得到的各數,資料間以空格為間隔。
【輸入樣例】2694
【輸出樣例】2694 7173 6354 3087 8352 6174

def kaprekar_process(num):

# 迴圈直到得到6174

while num != 6174:

# 將數字轉換為字串,方便進行操作

num_str = str(num)

# 將數字字串補齊到4位,不足的高位用'0'填充

while len(num_str) < 4:

num_str = '0' + num_str

# 將數字字串按照非遞減順序排序得到最小數和最大數

min_num = int(''.join(sorted(num_str)))

max_num = int(''.join(sorted(num_str, reverse=True)))

# 計算差值並更新num

num = max_num - min_num

# 輸出當前數

print(num, end=' ')

# 輸入一個任意各位數字不相同的4位數

num = int(input("Enter a 4-digit number with distinct digits: "))

# 驗證6174猜想並輸出過程中計算得到的各數

print(num, end=' ')

kaprekar_process(num)