シミュレーションしてもいいし、数学的に綺麗に解くこともできる!
問題概要
時計は 1 〜 12 を繰り返す。
時の
時間後は、何時であるかを答えよ。
制約
解法 (1):シミュレーション
から出発して、
回以下のことを繰り返せばよい。
- 1 増やす
- 13 になったら 1 に戻す
for
文を用いて 回繰り返そう。
コード
#include <bits/stdc++.h> using namespace std; int main() { int A, B; cin >> A >> B; for (int i = 0; i < B; ++i) { ++A; if (A == 13) A = 1; } cout << A << endl; }
解法 (2):数学的に解く
「1, 2, ..., 12 を繰り返す」とか、「月, 火, ..., 日を繰り返す」など、このようなものを扱うには割り算などのコツがある。
このようなとき、繰り返すものについては 0 から開始する方が都合がよい。なので、今回も「1, 2, ..., 12 を繰り返す」は「0, 1, ..., 11 を繰り返す」に修正して考えよう。具体的には
を 1 減らす
- その状態で
を足して、答えを求める
- 最後に 1 を足す
というようにすればよい。
その状態で に
を足すと
になる。この
を 12 で割った余りが答えとなる (最後に 1 を足す)。
コード
#include <bits/stdc++.h> using namespace std; int main() { int A, B; cin >> A >> B; --A; int res = (A + B) % 12; cout << res + 1 << endl; }