top1编程
← 返回题目
题解

淘汰赛

1 条题解

  • 0
    @ 2026-8-5 1:08:04

    解题思路

    滑冰比赛要淘汰得分最低的选手,剩下的选手按原来的顺序继续比赛。

    做法其实很简单,分两步:

    第一步:找出得分最低的选手是谁。 一边读入得分,一边用 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