これが最初の質問なので、うまくいきますように。
バックグラウンド:
あなたが考えているのは川ではありません。問題は、デジタルリバーの概念に関係しています。デジタルリバーは、次の番号が数字のシーケンスでn
あるn
その数字のプラス合計。
説明:
1 + 2 + 3 + 4 + 5 = 15であるため、12345の後に12360が続き、12345 + 15は12360になります。同様に、145の後に155が続きます。デジタルリバーの最初の数がの場合、M
これをriverと呼びますM
。
たとえば、川480は{480,492,507,519 ....}で始まるシーケンスであり、川483は{483,498,519、....}で始まるシーケンスです。通常の河川と河川は合流することができ、デジタル河川にも同じことが言えます。これは、2つのデジタル河川が同じ値のいくつかを共有している場合に発生します。
例:
480川は519で483川と合流します。480川は507で507川と合流し、481川とは合流しません。すべてのデジタル川は最終的に1川、3川、または9川に合流します。
与えられた整数n
に対して、川n
がこれら3つの川の1つに最初に出会う場所の値を決定できるプログラムを記述します。
入力
入力には複数のテストケースが含まれる場合があります。各テストケースは個別の行を占め、整数n
(1 <= n <= 16384
)を含みます。0
forの値を持つテストケースn
は入力を終了し、このテストケースは処理されません。
出力
入力の各テストケースについて、出力例に示すように、最初にテストケース番号(1から開始)を出力します。次に、別の行に「最初にyで川xに出会う」という行を出力します。ここで、yは川がn
最初に川に出会う最低値ですx
(x = 1または3または9)。の複数の値で川n
が川と合流x
する場合、最低値を出力します。2つの連続するテストケースの間に空白行を出力します。y
x
テストケース
入力:
86
12345
0
出力:
Case #1
first meets river 1 at 101
Case #2
first meets river 3 at 12423
得点:
最速のアルゴリズムが優先されます。引き分けの場合。コードが短い方が優先されます。
私のエラーを指摘してくれたmbomb007に感謝します。
PS:私は最小のソリューションではなく、最速のソリューションを持ちたいです。私も遅い私の解決策を持っています。そのためにはここを見てください。
注意:
これをコードテストに使用します。そして性能チェック。
M
これをリバーと呼びますM
"は2つの理由で意味がありません。最初に、リバーが無限の数列である場合、最後の桁がありません。第二に、次の段落で、川はから始まる川をM
意味しM
ます。