1 条题解

  • 0
    @ 2026-6-19 10:30:07

    📝 题目大意

    给定三个整数 a,b,ca, b, c,判断 bb 是否是这三个数的中位数(即排序后位于中间位置的数)。

    💡 解题思路

    1. 题目分析:数据范围 1a,b,c1001 \leq a, b, c \leq 100,非常小,直接判断即可。中位数的本质是:bbaacc 之间(含等于)。注意当 a,b,ca, b, c 中有相等元素时,中位数定义依然成立——如样例 3,三个数都是 100100bb 自然是中位数。

    2. 算法推导:要判断 bb 是否为中位数,只需要验证 bb 是否介于 aacc 之间。这等价于:

      • aca \geq c,则需 abca \geq b \geq c
      • aca \leq c,则需 abca \leq b \leq c

      将两个条件合并,即 (a >= b && b >= c) || (a <= b && b <= c)。该条件天然覆盖了 a,b,ca, b, c 全部相等的情况。

    3. 边界与细节

      • a=b=ca = b = c 时,两个子条件都成立,输出 Yes,正确。
      • a=bca = b \neq c 时,bbaa 相等,排序后 bb 在中间位置当且仅当 ccbb 的另一侧(更大或更小),条件仍正确判定。
      • 注意条件中的等号 >=<= 是必要的,不能写成严格大于/小于,否则会 WA 在相等的情况。

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1),仅常数次比较。
    • 空间复杂度O(1)O(1),仅使用三个整型变量。

    💻 标准代码 (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
    上传者