この切り上げ処理はぜひ憶えておこう!
問題概要
高橋君は、全 ページから成る書類を両面印刷する。両面印刷では、1 枚の紙に 2 ページ分のデータを印刷することができる。
最小で何枚の紙が必要か求めよ。
解法
が偶数のときは、
は 2 で割り切れて、
N / 2
が答えとなる。
が奇数のときは、1 ページ余ることになるので、
に 1 ページ分を足した
を 2 で割って、
(N + 1) / 2
が答えとなる。
これを if
文で場合分けして AC となるが......
......実は、 が偶数のときも、
(N + 1) / 2
でよいのだ。なぜなら、 が偶数のときは、1 を足して 2 で割っても、1 余るから商は結局同じなのだ。たとえば、
あまり 1
というようになる。つまり、8 / 2
も 9 / 2
も 4 なのである。
以上から、(N + 1) / 2
を出力すれば AC となる。
#include <bits/stdc++.h> using namespace std; int main() { int N; cin >> N; cout << (N + 1) / 2 << endl; }