【深基7.例9】最厉害的学生 - 题解
CodeZhangBorui · · 题解
本人第一次发题解,希望大佬支持
题目解释
现有 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;
}