けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 363 A - Piling Up (8Q, 灰色, 100 点)

レーティングネタ問題!

問題概要

1 以上 299 以下の整数  R が与えられる。

 R よりも大きい最小の 100 の倍数から  R を引いた値を求めよ。

解法 (1):場合分けして解く

場合分けして考えてしまうのが確実かもしれない。

  •  1 \le R \le 99 のとき: R より大きい最小の 100 の倍数は 100 なので、答えは  100 - R
  •  100 \le R \le 199 のとき: R より大きい最小の 100 の倍数は 200 なので、答えは  200 - R
  •  200 \le R \le 299 のとき: R より大きい最小の 100 の倍数は 300 なので、答えは  300 - R

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int R;
    cin >> R;
    
    if (R <= 99) cout << 100 - R << endl;
    else if (R <= 199) cout << 200 - R << endl;
    else cout << 300 - R << endl;
}

 

解法 (2):数学的に解く

 R を 100 で割った余りを  r としよう。

このとき、 R より大きい最小の 100 の倍数は、 R (100 - r) だけ足したものであることがわかる。

よって、答えは  100 - r である。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int R;
    cin >> R;
    
    cout << 100 - R % 100 << endl;
}