文章

【GESP】C++三级练习 luogu-B2125 最高分数的学生姓名

GESP三级练习,字符串练习(C++三级大纲中6号知识点,字符串),难度★★☆☆☆。

luogu-B2125 最高分数的学生姓名

题目要求

题目描述

输入学生的人数,然后再输入每位学生的分数和姓名,求获得最高分数的学生的姓名。

输入格式

第一行输入一个正整数 $N$($N \le 100$),表示学生人数。

接着输入 $N$ 行,每行包括一个整数和一个字符串,用空格分开,代表分数姓名。

分数是一个非负整数,且小于等于 $100$;

姓名为一个连续的字符串,中间没有空格,长度不超过 $20$。

数据保证所有同学的姓名都不同,而且最高分只有一位同学。

输出格式

获得最高分数同学的姓名。

输入输出样例 #1

输入 #1

1
2
3
4
5
6
5
87 lilei
99 hanmeimei
97 lily
96 lucy
77 jim

输出 #1

1
hanmeimei

说明/提示

hanmeimei 的分数最高 $99$ 分。


题目分析

解题思路

  1. 读取学生人数N
  2. 初始化最高分数为-1,最高分学生姓名为空字符串
  3. 循环N次,每次:
    • 读取当前学生的分数和姓名
    • 如果当前分数大于最高分:
      • 更新最高分
      • 更新最高分学生姓名
  4. 输出最高分学生姓名

复杂度分析:

  • 时间复杂度为 $O(n)$,其中n为学生人数
  • 空间复杂度为 $O(1)$,只需要存储最高分和对应姓名


示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<iostream>
#include<string>

int main() {
    // 读取学生人数
    int n;
    std::cin >> n;
    
    // 初始化最高分数为-1,最高分学生姓名为空
    int max = -1;
    std::string max_name;
    
    // 循环读取每个学生的分数和姓名
    for (int i = 0; i < n; i++) {
        int point;          // 存储当前学生分数
        std::string name;   // 存储当前学生姓名
        std::cin >> point >> name;
        
        // 如果当前分数高于最高分,更新最高分和对应学生姓名
        if (point > max) {
            max = point;
            max_name = name;
        }
    }
    
    // 输出最高分学生的姓名
    std::cout << max_name;
    return 0;
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页

luogu-”系列题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

bcqm-”系列题目可在编程启蒙题库进行在线评测。

本文由作者按照 CC BY 4.0 进行授权