2024/4/20

The-rich發表於2024-06-19
【題目描述】1955年,卡普耶卡(D.R.Kaprekar)對4位數字進行了研究,發現一個規律:對任意各位數字不相同的4位數,使用各位數字能組成的最大數減去能組成的最小數,對得到的差重複這個操作,最終會得到6174這個數字,並且這個操作最多不會超過7次。請編寫程式驗證這個猜想。
【練習要求】請給出原始碼程式和執行測試結果,原始碼程式要求新增必要的註釋。
【輸入格式】在一行中輸入一個任意各位數字不相同的4位數。
【輸出格式】驗證6174猜想,輸出過程中計算得到的各數,資料間以空格為間隔。
【輸入樣例】2694
【輸出樣例】2694 7173 6354 3087 8352 6174
def kaprekar_constant(num):    count = 0    while num != 6174:        digits = [int(x) for x in str(num)]        digits.sort()        asc_num = int(''.join(map(str, digits)))        desc_num = int(''.join(map(str, digits[::-1])))        num = desc_num - asc_num        count += 1    return count

驗證猜想

for i in range(1000, 10000):    if len(set(str(i))) == 4:        count = kaprekar_constant(i)        if count <= 7:            print("對於數字 {},猜想成立,操作次數為 {}".format(i, count))