白駿90476174


質問する
1949年にインドの数学者KaprekarがKaprekar演算を発明した.Kaprekar演算は、4桁のすべての桁が等しくない数字(111122222などを除く)の各桁の数字を並べ替え、最大と最小の数字を生成し、その差を計算し、結果として得られた新しい数字で同じ過程を繰り返す.
これは簡単な演算ですが、Kaprekarはこの演算が驚くべき結果を生むことを発見しました.今年の2008年で結果を見てみましょう.2008年の最大の数字は8200で、最小の数字は0028です.
  • 8200 – 0028 = 8172
  • 8721 – 1278 = 7443
  • 7443 – 3447 = 3996
  • 9963 – 3699 = 6264
  • 6642 – 2466 = 4176
  • 7641 – 1467 = 6174
  • 7641 – 1467 = 6174
  • 6174に到達すると、6174が生成される.2008年には6174ではなく、すべての数字ではない4桁がKaprekar演算によって6174になります.2008年の場合は、6つのステップを経て6174に達し、他の数字を入力すると、数ステップで6174に達するプログラムを作成します.
    入力
    入力は標準入力で受け付けます.入力された第1行は、試験例の個数T(1≦T≦20)を与える.各試験例の1行に4桁(1000~9999)がある.しかし、この数字は111122222のように、1つの数字からなる数字を除く.
    しゅつりょく
    出力は標準出力で出力されます.各テストケースについて、Kaprekar演算により、各行が1つ出力され、数ステップで6174に達する.
    入力例1
    3
    6174
    1789
    2005
    サンプル出力1
    0
    3
    7
    解法
    Nを文字列として入力し、Nが6174でなければ繰り返します.
    反転したNを整数にするために、Nをリストに変更し、join()を使用して逆さにし、文字列に再変換します.
    また,Nは常に4ビットでなければならないので,zfill()関数を用いて3ビット以下の整数であれば,前に0を付けて4ビットとする.
    コード#コード#
    for _ in range(int(input())):
        N = input()
        result = 0
        while N != '6174':
            li = sorted(list(map(str, N)))
            A, B = int(''.join(li)), int(''.join(li[::-1]))
            N = str(B - A).zfill(4)
            result += 1
        print(result)
    
    白駿90476174