【AtCoder-Ruby】ABC100 B - Ringo's Favorite Numbers
問題文
今日は, 記念すべき AtCoder Beginner Contest 100 が開催される。
そのため, 高橋君はりんごさんに, ある整数をプレゼントしようと思った。
今日のコンテストは「AtCoder Beginner Contest 100」なので, りんごさんは 100 で ちょうど D 回割りきれる正の整数をプレゼントされると喜ぶ.
さて, りんごさんがプレゼントされると喜ぶような整数のうち N 番目に小さいものを求めなさい。制約
- D は 0 , 1 , 2 のいずれかである
- N は 1 以上 100 以下の整数
考えたこと
朝、寝起きにやったこともあり、何言っているかよくわからないので、サンプル2, 3 の結果を見て回答してみた。
D, N = gets.strip.split.map(&:to_i) puts (10 ** (D + 1)) * N
まあ、ダメだよね。(10 を階乗してるし。多分頭回っていなかった。。)
お昼休みに気を取り直して回答
- D は、100で割り切れる回数で「 0 , 1 , 2」
- N は、順番で N番目に小さいもので「1 以上 100 以下の整数」
ああ。。。
- D = 0 のときは割り切れるものがないので、N が答え
- D = 1 の時 100 * N
- D = 2 の時 10000 * N
- 要は (100 ** D) * N
D, N = gets.strip.split.map(&:to_i) puts (100 ** D) * N
一部のテストケースで不正解!
なぜだ。。。
回答を確認
したがって、𝑁 ≤100 を仮定すると、𝑁 ≤99 のとき 𝑁𝑎 = 𝑁 ×100𝐷 が答えとなり、
𝑁 = 100 のとき 101𝑎 = 101 × 100𝐷 が答えになります。
なるほど。100 の判定が必要だった。
回答
D, N = gets.strip.split.map(&:to_i) n = N != 100 ? N : N + 1 puts (100 ** D) * n
考察
この回答だと、200, 300 の時には正解がでない。
方針2, 方針3 での実装が必要。
あとで回答しよう。