题解
比身高
1 条题解
-
0
解题思路
按照学号顺序输入全班同学的身高,身高都不重复。我们要找出最矮的同学,然后按学号顺序输出排在他前面的所有同学的学号和身高(不包含最矮本人)。
做法很简单:
- 找最矮:一边读入身高,一边用一个变量
mn记录“目前最矮的同学在哪个位置”。如果发现当前身高比h[mn]更矮,就把mn更新成当前的学号。读完一遍,mn 就是最矮同学的学号。 - 输出前面的同学:题目保证第一名同学不是最矮,所以最矮同学的学号一定大于 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