top1编程
← 返回题目
题解

比身高

1 条题解

  • 0
    @ 2026-8-5 1:30:41

    解题思路

    按照学号顺序输入全班同学的身高,身高都不重复。我们要找出最矮的同学,然后按学号顺序输出排在他前面的所有同学的学号和身高(不包含最矮本人)。

    做法很简单:

    1. 找最矮:一边读入身高,一边用一个变量 mn 记录“目前最矮的同学在哪个位置”。如果发现当前身高比 h[mn] 更矮,就把 mn 更新成当前的学号。读完一遍,mn 就是最矮同学的学号。
    2. 输出前面的同学:题目保证第一名同学不是最矮,所以最矮同学的学号一定大于 1。从学号 1 输出到学号 mn-1,每行输出学号和身高。

    用样例验证:最矮的是第 6 位同学(111),所以输出学号 1~5 的同学:1 112、2 116、3 160、4 154、5 144,和样例一致。

    参考代码

    // P4496 比身高:找出最矮的同学,按学号顺序输出排在他前面的所有学生的学号和身高
    #include <iostream>
    using namespace std;
    int h[105];
    
    int main() {
        int n;
        cin >> n;                  // 读入学生人数
        int mn = 1;                // mn 记录最矮同学的位置
        for (int i = 1; i <= n; i++) {
            cin >> h[i];           // 读入每个学生的身高
            if (h[i] < h[mn]) mn = i;   // 更新最矮
        }
        // 输出最矮同学前面(学号比 mn 小)的所有学生
        for (int i = 1; i < mn; i++) cout << i << ' ' << h[i] << '\n';
        return 0;
    }
    

    复杂度分析

    • 读入身高并找最矮,扫一遍 n 个学生:O(n)。
    • 输出最矮前面的学生,最多 n-1 个:O(n)。

    总时间复杂度 O(n),空间复杂度 O(n)。

    • 1