Coding_Gamesメモ_The_River_II

Coding_Gamesメモ_The_River_II

javaの学習にCoding_Games を知り、学習の記録としてメモ。
To debug:

System.err.println( );

を使うとデバックしやすくなる。(エラー出力は評価に影響しない)

内容

数字遊び ある数字が合流ポイントになるか調べる

ルール

ある数字にすべての桁の合計を足した数字を足していく

7,(7+7)14

ある数字が他の数字の計算の答えとしてあるかどうか出力


29 は合流ポイントになるか (19+1+9)29,
19 と29 の答えが合流する

インプット

1行目 調べる数字 r1

アウトプット

"YES" or "NO"

使用したクラス

Integer

(static int) = Integer.parseInt(str)
数字を表す文字列str をint に変換する
valueOf との違いはparseInt は基本のデータ型のint を出力し、valueOf はラッパークラスのInteger を出力する

StringBuilder

(String) = StringBuilder.substring(x,y)
文字列の一部をコピーする。
x,yはint型
xがコピー開始位置、yは終了位置、yが指定されていなければ最後まで指定したのと同じ。

考え方
The_River_I の関数を使い1 〜r1 まで探すと時間が足りない
すでに計算した流れをスキップしても足りない
なので大雑把に計算範囲を指定して1度だけ関数を使って計算して答えがr1になるものがあるかどうかで判断する
桁の数字すべてを足すので1度の計算でr1 になる可能性がある範囲はおおよそ
r1 -1 〜 r1 -(r1 の一番大きい桁) -(9(r1の桁数 -1))
になる
r1 = 29
29 -2 -(9
(2-1)) = 18
28 〜 18

Coding_Games:https://www.codingame.com/
Integer (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Integer.html
StringBuilder (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/StringBuilder.html