P5740 【深基7.例9】最厉害的学生
1.题目介绍
【深基7.例9】最厉害的学生
题目描述
现有 \(N\) 名同学参加了期末考试,并且获得了每名同学的信息:姓名(不超过 \(8\) 个字符的仅有英文小写字母的字符串)、语文、数学、英语成绩(均为不超过 \(150\) 的自然数)。总分最高的学生就是最厉害的,请输出最厉害的学生各项信息(姓名、各科成绩)。如果有多个总分相同的学生,输出靠前的那位。
输入格式
第一行输入一个正整数 \(N\),表示学生个数。
第二行开始,往下 \(N\) 行,对于每一行首先先输入一个字符串表示学生姓名,再输入三个自然数表示语文、数学、英语的成绩。均用空格相隔。
输出格式
输出最厉害的学生。
样例 #1
样例输入 #1
3
senpai 114 51 4
lxl 114 10 23
fafa 51 42 60
样例输出 #1
senpai 114 51 4
提示
数据保证,\(1 \leq N \leq 1000\),姓名为长度不超过 \(8\) 的字符串,语文、数学、英语成绩均为不超过 \(150\) 的自然数。
2.题解
2.1 类class
思路
这里主要是学习类创建相关的知识
- bool operator>(const Student& other) const {}
1.1 这是一个运算符重载函数,典型格式 Type operator(运算符)()....
1.2 这里的const表明在这个函数中不会修改成员变量,如有修改,报错
2.这里的构造函数采用了C++11引入的初始化列表的方法来简化代码 格式为:...(): 初始化对象(初始化值),...,... {}
3.自己构造类似Java中的to_string函数,使用'+'运算符时,允许字符串,字符间使用'+'相连,不能直接使用到其他类型上,无法自动类型转换!!!
这里也可以使用输出流ostringstream的方法记录。
4.const的方法不可以调用非const的方法,这里在>运算符的重载函数调用了sum函数,sum函数必须是const的,否则会报错
5.使用构造函数构造的对象存储在栈上,方法结束自动释放;但是使用new或者malloc创建的对象必须自己手动释放!!!
代码
#include<bits/stdc++.h>
using namespace std;
class Student{
public:
// Student(string name, int score_Ch, int score_Math, int score_En){
// this->name = name;
// this->score_Ch = score_Ch;
// this->score_En = score_En;
// this->score_Math = score_Math;
// }
Student(string name, int score_Ch, int score_Math, int score_En)
: name(name), score_Ch(score_Ch), score_En(score_En), score_Math(score_Math) {}
string to_string() const{
// return name + ' ' + std::to_string(score_Ch) + ' ' + std::to_string(score_Math) + ' ' + std::to_string(score_En); //这里必须要用std::表明作用域范围,不然会引起冲突
//使用字符串输出流来存储也是可以的
ostringstream oss;
oss << name << ' ' << score_Ch << ' ' << score_Math << ' ' << score_En;
return oss.str(); //得到字符串形式
}
int sum()const{
return score_Ch + score_Math + score_En;
}
bool operator>(const Student& other) const{ //表示这个成员函数不会修改类的成员变量
return sum() > other.sum(); //const函数不能调用非const函数,所以sum也要加上const
}
private:
string name;
int score_Ch, score_Math, score_En;
};
int main(){
int n;
cin >> n;
Student sMax("",-1,-1,-1); //避免最高分就是零分,导致错误
for (int i = 0; i < n; i++){
string name;
int sc, sm, se;
cin >> name >> sc >> sm >> se;
Student stu(name, sc, sm, se);
if(stu > sMax)
sMax = stu;
}
cout << sMax.to_string();
}
2.2 结构体struct
思路
代码



浙公网安备 33010602011771号