1 条题解
-
0
📝 题目大意
给定三个整数 ,判断 是否是这三个数的中位数(即排序后位于中间位置的数)。
💡 解题思路
-
题目分析:数据范围 ,非常小,直接判断即可。中位数的本质是: 在 和 之间(含等于)。注意当 中有相等元素时,中位数定义依然成立——如样例 3,三个数都是 , 自然是中位数。
-
算法推导:要判断 是否为中位数,只需要验证 是否介于 和 之间。这等价于:
- 若 ,则需
- 若 ,则需
将两个条件合并,即
(a >= b && b >= c) || (a <= b && b <= c)。该条件天然覆盖了 全部相等的情况。 -
边界与细节:
- 当 时,两个子条件都成立,输出
Yes,正确。 - 当 时, 与 相等,排序后 在中间位置当且仅当 在 的另一侧(更大或更小),条件仍正确判定。
- 注意条件中的等号
>=和<=是必要的,不能写成严格大于/小于,否则会 WA 在相等的情况。
- 当 时,两个子条件都成立,输出
⏱️ 复杂度分析
- 时间复杂度:,仅常数次比较。
- 空间复杂度:,仅使用三个整型变量。
💻 标准代码 (C++)
#include<bits/stdc++.h> using namespace std; int main(){ int a, b, c; cin >> a >> b >> c; // 判断 b 是否介于 a 和 c 之间(含等于) // 情况1:a >= b >= c(a 是最大值,c 是最小值) // 情况2:a <= b <= c(a 是最小值,c 是最大值) // 两者满足其一,b 即为中位数 if ((a >= b && b >= c) || (a <= b && b <= c)) { cout << "Yes"; } else { cout << "No"; } return 0; } -
- 1
信息
- ID
- 603
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者