【深基7.例9】最厉害的学生 - 题解

· · 题解

本人第一次发题解,希望大佬支持

题目解释

现有 N ( N\le 1000 ) 名同学参加了期末考试,

数据量很小,直接模拟。

并且获得了每名同学的信息:姓名(不超过 8 个字符的字符串,没有空格)、语文、数学、英语成绩(均为不超过 150 的自然数)。

可以用结构体 struct(注意后面加分号):

struct Student{
    string name;
    int Chinese,Math,English;
};

总分最高的学生就是最厉害的,请输出最厉害的学生各项信息(姓名、各科成绩)。如果有多个总分相同的学生,输出靠前的那位。

虽然 sort() 很方便,但是这是结构体不可以用 sort(),所以直接在输入时就判断好是否是最大值,还节省运行时间。

AC代码

/*
P5740 【深基7.例9】最厉害的学生 <2020-10-29>
[Accepted 10ms 688KB]
*/
#include <bits/stdc++.h>//万能的头文件嘿嘿 
using namespace std;

struct Student{//定义结构体 
    string name;//如果不用万能头文件需要 #include <string> 
    int Chinese,Math,English;
};

int main(){
    Student students[1000];//学生数最大为1000 
    int id;//分数最高的学生的下标 
    int n;//有多少个学生 
    scanf("%d",&n);
    cin
        >>students[0].name//cin可以分开写,防止一行过长 
        >>students[0].Chinese//一行内最好不要超过79字符 
        >>students[0].Math
        >>students[0].English
    ;//cin依次输入第一位学生([0])的名字,语文、数学、英语成绩 
    id=0;//假设第一位学生成绩最高 
    for(int i=1;i<n;i++){//从第二位学生([1])开始遍历 
        cin
            >>students[i].name
            >>students[i].Chinese
            >>students[i].Math
            >>students[i].English
        ;//cin依次输入第i+1位学生的名字,语文、数学、英语成绩 
        if(
            (students[i].Chinese + students[i].Math + students[i].English)
            >
            (students[id].Chinese + students[id].Math + students[id].English)
        ){//如果现在输入的这位学生的成绩大于已经标记的学生的成绩 
            id=i;//重新标注这位学生是第一名 
        }
    }
    cout
        <<students[id].name<<" "//记得输出后加空格
        <<students[id].Chinese<<" "
        <<students[id].Math<<" "
        <<students[id].English<<" "
    ;//输出第一名学生的的名字,语文、数学、英语成绩
    return 0;
}