top1编程
← 返回题目
题解

找出每排最高的人

1 条题解

  • 0
    @ 2026-8-5 12:14:09

    解题思路

    体操方阵有 n 排,每排 10 个同学,我们要找出每一排最高的同学。

    思路很直接:一排一排地处理。

    1. 先假设这一排第1个人最高,记下来;
    2. 然后依次和后面的同学比身高,谁高就让谁当"临时第一高";
    3. 这一排比完,留下的就是本排最高的人,输出它。

    题目还提了两个小要求:

    • 使用系统函数 max:C++ 自带的 max(a, b) 函数能返回两个数里较大的那个,我们可以用它来更新最高值;
    • 自定义 func 函数:把"找出这一排最高的人"这件事写成一个函数 func,每排调用一次,代码更整洁。

    打个比方:就像"武林高手擂台赛",先派第1个人当擂主,后面的同学一个个上来挑战,谁个子高谁就留在台上,最后留在台上的就是本排的"最高擂主"!

    参考代码

    // P4603 找出每排最高的人:每排10人,用函数找出每排最高身高
    #include <iostream>
    using namespace std;
    
    // 自定义func函数:找出一排学生中最高的身高
    int func(int a[], int len) {
        int mx = a[0];  // 先假设第一个是最高的
        for (int i = 1; i < len; i++) {
            mx = max(mx, a[i]);  // 使用系统函数max,比较当前最高的
        }
        return mx;
    }
    
    int main() {
        int n;
        cin >> n;
        int h[10];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < 10; j++) cin >> h[j];  // 读入一排10个身高
            cout << func(h, 10) << endl;               // 调用函数输出本排最高
        }
        return 0;
    }
    

    复杂度分析

    • 每排有 10 个同学,共 n 排,一共要比较 10×n 次,所以时间复杂度是 O(n)。
    • 我们只用一个长度为 10 的临时数组,空间复杂度是 O(1)。

    因为每排人数固定是10,所以程序运行时间只和排数 n 成正比,n 最大30,瞬间就能跑完。

    • 1