【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$ 分。
题目分析
解题思路
- 读取学生人数N
- 初始化最高分数为-1,最高分学生姓名为空字符串
- 循环N次,每次:
- 读取当前学生的分数和姓名
- 如果当前分数大于最高分:
- 更新最高分
- 更新最高分学生姓名
- 输出最高分学生姓名
复杂度分析:
- 时间复杂度为 $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 进行授权