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

提示

数据保证,1N1000,姓名为长度不超过 8 的字符串,语文、数学、英语成绩均为不超过 150 的自然数。

2.题解

2.1 类class

思路

这里主要是学习类创建相关的知识

  1. 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

思路

代码


posted @   DawnTraveler  阅读(194)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示