この切り上げ処理はぜひ憶えておこう!
問題概要
高橋君は、全 ページから成る書類を両面印刷する。両面印刷では、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; }