いろんな解法がある!
問題概要
以上
以下の整数のうち、
との差の絶対値が最も小さいものを求めよ。
制約
解法 (1):for
文
一番確実な方法は、for
文を用いて、 をすべて調べることだと思われます。
が最小となるような
を求めればよいでしょう。
コード
#include <bits/stdc++.h> using namespace std; int main() { int X, L, R; cin >> X >> L >> R; int min_value = 200000; // 十分大きな値で初期化 int min_x = -1; for (int x = L; x <= R; ++x) { int diff = abs(x - X); // x と X との差 if (diff < min_value) { min_value = diff; min_x = x; } } cout << min_x << endl; }
解法 (2):場合分けする
数学的に処理してみましょう。
まず、 のときは、
のとき、
と
の差は 0 となります。これが明らかに最小です。
次に、 のときは、
のとき、
と
の差は
となり、これが最小です。
最後に、 のときは、
のとき、
と
の差は
となり、これが最小です。
コード
#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; }