ちょっとした算数的な考え方が必要になる問題
問題概要
JOI 君は以下の行動を行動 A → 行動 B → 行動 A → ⋯ のように交互に繰り返す。
- 行動 A:3m 前に進む
- 行動 B:2m 後ろに戻る
行動を合わせて 回行うとき、何m進むか?
解法
このような問題を解くとき、 のさまざまな値を試してみることが有効です。たとえば
- のとき:3m
- のとき:3 - 2 = 1m
- のとき:3 - 2 + 3 = 4m
- のとき:3 - 2 + 3 - 2 = 2m
- のとき:3 - 2 + 3 - 2 + 3 = 5m
- のとき:3 - 2 + 3 - 2 + 3 - 2 = 3m
- ...
という感じです。これをみると、次のことがわかります。
が偶数である場合には、「3 - 2 = 1m の移動」を X / 2
( を 2 で割った商です)回繰り返す。
つまり、X / 2
m 進みます。
が奇数である場合も同様に、「3 - 2 = 1m の移動」を X / 2
( を 2 で割った商です)回繰り返したあと、「+3m の移動」を 1 回行います。
つまり、X / 2 + 3
m 進みます。
まとめ
まとめると、次のように整理できます。
- が偶数のとき:
X / 2
m - が奇数のとき:
X / 2 + 3
m
コード
#include <bits/stdc++.h> using namespace std; int main() { int X; cin >> X; if (X % 2 == 0) { cout << X / 2 << endl; } else { cout << X / 2 + 3 << endl; } }