1 条题解

  • 0
    @ 2026-5-16 22:45:07

    1950A - 楼梯、山顶,还是两者都不?详细题解

    给定三个数字 aabbcc。判断它们是构成楼梯山峰,还是两者都不是。

    • 楼梯:满足 a<b<ca < b < c
    • 山峰:满足 a<ba < bb>cb > c

    输入格式

    • 第一行一个整数 tt,满足 1t10001 \le t \le 1000
    • 接下来 tt 行,每行三个整数 a,b,ca,b,c,满足 0a,b,c90 \le a,b,c \le 9

    输出格式

    • 楼梯:输出 STAIR
    • 山峰:输出 PEAK
    • 都不是:输出 NONE

    核心思路(标程思路)

    本题只需要两个条件判断

    1. 判断是否满足楼梯:a<bb<ca < b \land b < c
    2. 判断是否满足山峰:a<bb>ca < b \land b > c
    3. 否则输出 NONE

    ⚠ 注意: C++ 不支持链式比较 a < b < c,必须写成 a < b && b < c


    标程公式(数学形式)

    • 楼梯条件:
    (a<b)(b<c)(a < b) \land (b < c)
    • 山峰条件:
    (a<b)(b>c)(a < b) \land (b > c)

    完整可提交 AC 代码(C++)

    #include <iostream>
    using namespace std;
    
    int main() {
        int t;
        cin >> t;
        while (t--) {
            int a, b, c;
            cin >> a >> b >> c;
            
            if (a < b && b < c) {
                cout << "STAIR\n";
            } else if (a < b && b > c) {
                cout << "PEAK\n";
            } else {
                cout << "NONE\n";
            }
        }
        return 0;
    }
    

    代码解释

    1. 读入测试用例数 tt
    2. 循环 tt
      • 读入 a,b,ca,b,c
      • 先判断是否楼梯:a < b && b < c
      • 再判断是否山峰:a < b && b > c
      • 否则输出 NONE
    3. 输出结果

    复杂度

    • 时间:O(t)O(t)
    • 空间:O(1)O(1)
    • 完全满足题目限制 t1000t \le 1000

    样例验证

    输入:

    7
    1 2 3
    3 2 1
    1 5 3
    3 4 1
    0 0 0
    4 1 7
    4 5 7
    

    输出:

    STAIR
    NONE
    PEAK
    PEAK
    NONE
    NONE
    STAIR
    

    标程总结(最重要)

    • 只需要 2 个 if
    • 必须用 && 连接比较式
    • 顺序:先判断楼梯,再判断山峰
    • 其余情况输出 NONE
    • 1

    信息

    ID
    7138
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者