A - X に最も近い値 (The Nearest Value) Editorial by TumoiYorozu


この解説は、C++ に入門したばかりの中高生レベルを想定して、考察の方法、コードの書き方の解説をします。

まず、入力例1 を詳しく考えてみよう。

入力例1 では \(X=8, L=3, R=6\) であった。

3~6 の範囲の整数に対して、X=8 との差を考えると

Xとの差
3 5
4 4
5 3
6 2 ←

となり、 6 のときが最も X との差が少ない。

次は入力例 2 の場合である。

3~10 の範囲の整数に対して、X=7 との差を考えると

Xとの差
3 4
4 3
5 2
6 1
7 0 ←
8 1
9 2
10 3

となり、 7 のときが最も X との差が少ない。

ヒント1: 考察の為のヒント

この問題は if 文を用いて場合分けを行うことで求める事ができる。

X が L~R の範囲に含まれている場合、含まれていない場合、…など場合分けをして考えてみよう。

ヒント2: 場合分けのしかた

具体的には、以下の3つのケースに場合分けをすれば良い。

  • X が L 以下のとき
  • X が R 以上のとき
  • X が L~R の範囲内の時(つまり、上の2条件のどちらにも当てはまらないとき)

ヒント3: 解き方の考察

L 以上 R 以下のうち、最も X との差が小さい整数は

  • X ≦ L のときは、 L である
  • R ≦ X のときは、R である
  • それ以外のときは、 X となる

解答コード

コード例

実際の提出のリンクはこちら

#include <bits/stdc++.h>
using namespace std;
int main(){
    int X, L, R;
    cin >> X >> L >> R;

    if (X <= L) {
        cout << L << endl;

    } else if(R <= X) {
        cout << R << endl;

    } else {
        cout << X << endl;
    }
}

posted:
last update: