题解
找出每排最高的人
1 条题解
-
0
解题思路
体操方阵有 n 排,每排 10 个同学,我们要找出每一排最高的同学。
思路很直接:一排一排地处理。
- 先假设这一排第1个人最高,记下来;
- 然后依次和后面的同学比身高,谁高就让谁当"临时第一高";
- 这一排比完,留下的就是本排最高的人,输出它。
题目还提了两个小要求:
- 使用系统函数 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