ある自然数に対するカプレカ―変換は,以下の手順で定義される.

  1. 自然数の桁の数字を大きい順に並び替え,その桁数字を用いてできる最大の自然数を作る
  2. 自然数の桁の数字を小さい順に並び替え,その桁数字を用いてできる最小の自然数を作る
  3. 最大の自然数(手順1)から最小の自然数(手順2)を引き,自然数を更新する

3桁の自然数(ただし全ての桁の数字が同じものは除く)に対して,カプレカ―変換を繰り返し適用すると,必ず495に到達することが知られている.例えば,$246$を出発点とすると,以下のように$495$に到達する.


問題


標準入力より3桁までの自然数を読み込み,$495$に到達するまでカプレカ―変換を繰り返すプログラムを作成せよ.

プログラムは以下の仕様を満たすこと.

  1. 各行に1回のカプレカー変換の様子を「最大の自然数 - 最小の自然数 = 新しい自然数」という形式で出力すること.実行例を参考にせよ.
  2. 3桁に満たない数字については上位の桁が$0$で埋められていると考える.
    • たとえば$909$に対するカプレカー変換は$909 \mapsto 990 - 99 = 891$であり,$9$に対するカプレカー変換は$9 \mapsto 900 - 9 = 891$である.
    • 各自然数は右詰めで3桁になるように適宜空白を挿入せよ.
  3. カプレカ―変換後の自然数が495になった段階で,プログラムを終了せよ.
  4. 3桁よりも大きい値の場合は,ERROR!と表示して終了
  5. $0$または桁の数字が同じもの($111,222,\dots,999$)の場合は,ERROR!と表示して終了
  6. 各表示は標準出力に書き出し,末尾には改行文字\nを付けること.
  7. #include していいのは <stdio.h>のみとする.

実行例


#は標準入力,>は標準出力を表す.

# 123
> 321 - 123 = 198
> 981 - 189 = 792
> 972 - 279 = 693
> 963 - 369 = 594
> 954 - 459 = 495
# 121
> 211 - 112 =  99
> 990 -  99 = 891
> 981 - 189 = 792
> 972 - 279 = 693
> 963 - 369 = 594
> 954 - 459 = 495
# 9
> 900 -   9 = 891
> 981 - 189 = 792
> 972 - 279 = 693
> 963 - 369 = 594
> 954 - 459 = 495

手順例


  1. 値を読み込む
  2. 3桁それぞれの値を抽出
  3. 3桁のなかで「最大の数字」「中間の数字」「最小の数字」を取得
  4. 最大の自然数から最小の自然数を引いて新たな値を取得
  5. 指定されたフォーマットで値を出力

少しずつ作り,少しずつテストする

参考文献