题解
淘汰赛
1 条题解
-
0
解题思路
滑冰比赛要淘汰得分最低的选手,剩下的选手按原来的顺序继续比赛。
做法其实很简单,分两步:
第一步:找出得分最低的选手是谁。 一边读入得分,一边用
minp记住"目前得分最低的选手在第几个位置"。每读一个分数,就和它比一比,如果更小就换人。第二步:输出时跳过这位选手。 再从第一个选手开始输出,遇到
i == minp就跳过(continue),其他的分数照常输出。这样就把最低分"删除"了,而且其他人的顺序一点都没变。打个比方:教室里有一排小朋友,老师要把最矮的一个请出列,剩下的小朋友还站在原地,顺序不变,我们挨个报他们的身高就行。
参考代码
// P4475 淘汰赛:找出最低分并删除,按输入顺序输出其余选手分数 #include <iostream> using namespace std; int main() { int n; cin >> n; int a[1005]; int minp = 0; // 最低分选手的位置 for (int i = 0; i < n; i++) { cin >> a[i]; if (a[i] < a[minp]) minp = i; // 比目前最低的还低,更新最低 } int first = 1; // 控制空格 for (int i = 0; i < n; i++) { if (i == minp) continue; // 跳过最低分,相当于删除 if (!first) cout << ' '; // 不是第一个数,前面加空格 cout << a[i]; first = 0; } cout << endl; return 0; }复杂度分析
- 时间:第一遍找最低分 O(n),第二遍输出 O(n),总时间 O(n)。
- 空间:用数组存了 n 个分数,是 O(n)。
- 1