ちょっと整理するのが大変な問題。
問題概要
一直線上の座標 の点に、それぞれ A さん、B さん、C さんがいる。
2 人は、距離が 以内にいるとき、直接的に通信ができる。
A さんと C さんが、直接的に、あるいは間接的に、通信ができるかどうかを判定せよ。なお、間接的に通信ができるとは、A さんと B さんが直接的に通信できて、B さんと C さんが直接的に通信できることをいう。
解法
A さんと C さんが直接的に通信できるための条件は
`if (abs(a - c) <= d)'
などと書ける。そして、A さんと C さんが間接的に通信できるための条件は
if(abs(a - b) <= d && abs(b - c) <= d)
などと書ける。ポイントとして、
- 距離は絶対値なので、関数
abs()
が使えること (大小関係で場合分けして差をとるよりも楽) - 論理演算子「&&」の使い方
を確認しよう!
#include <bits/stdc++.h> using namespace std; int main() { int a, b, c, d; cin >> a >> b >> c >> d; if (abs(a - c) <= d) cout << "Yes" << endl; else if (abs(a - b) <= d && abs(b - c) <= d) cout << "Yes" << endl; else cout << "No" << endl; }