top1编程
← 返回题目
题解

分数最高的同学

1 条题解

  • 0
    @ 2026-8-5 10:29:40

    解题思路

    题目要我们在一群同学里找出分数最高的那一位,输出他的名字。

    做法可以想象成打擂台:

    1. 准备两个变量:best 存"当前擂主的姓名",maxs 存"当前最高分"。
    2. 一开始擂台上没有人,把 maxs 设成一个特别小的数(比如 -1)。这样第一个同学一上场,score > maxs 一定成立,他就能当上擂主。
    3. 依次读入每个同学的姓名和分数。如果这个分数比 maxs 大,说明来了一位更强的擂主,就更新 best 和 maxs。
    4. 注意我们用 > 而不是 >=:当分数一样时,我们先看见的同学继续当擂主,也就是"同分时保留先出现的"。
    5. n 个人都比完,输出擂主 best 的姓名。

    参考代码

    // 分数最高的同学:读入n个人的姓名和分数,输出分数最高者的姓名
    #include <iostream>
    #include <string>
    using namespace std;
    int main(){
        int n;
        cin>>n;
        string name,best; // best存当前最高分同学的姓名
        int score,maxs=-1;
        for(int i=0;i<n;i++){
            cin>>name>>score;      // 读入姓名和分数
            if(score>maxs){        // 分数更高才更新(同分保留先出现的)
                maxs=score;
                best=name;
            }
        }
        cout<<best<<'\n';
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(n),n 组数据。每组数据只做一次比较和一次更新,都是常数时间。
    • 空间复杂度:O(1)。我们只需要记住当前的最高分和对应姓名,不需要把 n 个人的数据全部存下来。
    • 1