2174. 【一命通关】之结构体

1000ms 512MB 简单 一命通关系列
题目描述

欢迎来到"一命通关"系列第五关!本关考验你对结构体(struct)的定义与使用能力。

某班级有 n 名学生,每位学生包含以下信息:姓名(字符串)、语文成绩、数学成绩、英语成绩。请完成以下五个任务:

任务1:定义与输入输出
定义一个名为 Student 的结构体,包含姓名和三科成绩。读入所有学生信息后,按输入顺序逐行输出每位学生的完整信息。

任务2:计算总分并输出
为每位学生计算三科总分,并按输入顺序逐行输出:姓名 总分

任务3:查找最高总分
找出总分最高的学生,输出其姓名和总分。如果有多个学生总分相同且都是最高,输出第一个出现的。

任务4:按总分降序排序
将所有学生按总分从高到低排序。如果总分相同,则按姓名字典序升序排列。输出排序后的结果,每行格式为:姓名 总分

任务5:统计优秀人数
统计总分 ≥ 270 的学生人数并输出。

输入格式

第一行输入一个正整数 n(1 ≤ n ≤ 100)。
接下来 n 行,每行包含一个字符串和三个整数,分别表示姓名、语文、数学、英语成绩。姓名长度不超过 20,各科成绩在 0~100 之间。

输出格式

按照上述五个任务的顺序依次输出,每个任务的结果前加一行标题提示(见样例输出),各任务之间用空行分隔。

样例 1
输入 (Input)
3
Alice 90 95 88
Bob 85 90 95
Charlie 92 88 90
输出 (Output)
=== Task 1 ===
Alice 90 95 88
Bob 85 90 95
Charlie 92 88 90

=== Task 2 ===
Alice 273
Bob 270
Charlie 270

=== Task 3 ===
Alice 273

=== Task 4 ===
Alice 273
Bob 270
Charlie 270

=== Task 5 ===
3
  • 结构体定义
    struct Student {
        string name;
        int chinese, math, english;
        int total; // 可以在结构体中直接存储总分
    };
  • 数组存储Student stu[105];
  • 自定义排序:使用 sort 函数配合比较函数或 lambda 表达式。
    bool cmp(Student a, Student b) {
        if (a.total != b.total) return a.total > b.total; // 总分降序
        return a.name < b.name; // 字典序升序
    }
    sort(stu + 1, stu + n + 1, cmp);
  • 字典序比较:C++ 中 string 类型可以直接用 < > 进行比较,默认即为字典序。
  • 头文件:记得包含 <algorithm> 以使用 sort
自测终端 stdin → stdout
输入 stdin
CtrlShiftEnter
输出 stdout

                
错误 stderr

                
CtrlEnter提交
自动保存已开启
操作成功
wzs_oj@kernel:~ — wzs-sh
guest@wzsoj:~$
刷新页面 F5
复制 Ctrl+C
粘贴 Ctrl+V
搜索题目
站点公告
今日神谕
CSP 倒计时
排行榜
我的提交
Esc 关闭 Enter 跳转 支持模糊匹配数字