题目来源
P5740 【深基7.例9】最厉害的学生 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题目描述
现有 N 名同学参加了期末考试,并且获得了每名同学的信息:姓名(不超过 8 个字符的仅有英文小写字母的字符串)、语文、数学、英语成绩(均为不超过 150 的自然数)。总分最高的学生就是最厉害的,请输出最厉害的学生各项信息(姓名、各科成绩)。如果有多个总分相同的学生,输出靠前的那位。
输入格式
第一行输入一个正整数 N,表示学生个数。
第二行开始,往下 N 行,对于每一行首先先输入一个字符串表示学生姓名,再输入三个自然数表示语文、数学、英语的成绩。均用空格相隔。
输出格式
输出最厉害的学生。
分析&思路
题目乍一看不是很难,可你实际做起来就会发现真的不难。我看好多人都是定义一个好像是函数,但我看着觉得不好理解。于是我就用我的思路来解了这道题。
#include <bits/stdc++.h>
using namespace std;
int maxx,maxi;//两个变量,以后有用(一个存储最大值,一个存储i的值)
int main(int argc, char** argv)
{
int n;//定义n
cin>>n;//输入n
return 0;
}
开头没什么难的,接下来就是定义几个数组来存放各个值了
#include <bits/stdc++.h>
using namespace std;
int maxx,maxi;//两个变量,以后有用(一个存储最大值,一个存储i的值)
int main(int argc, char** argv)
{
int n;//定义n
cin>>n;//输入n
string name[n];//由于名字是字符串,所以用string来存储。因为不是一个名字,所以要用字符数组
int chi[n];//chi是chinese的缩写,代表语文成绩
int mat[n];//mat是maths的缩写,数学成绩
int eng[n];//eng是english的缩写,英语
return 0;
}
接下来就是输入
#include <bits/stdc++.h>
using namespace std;
int maxx,maxi;//两个变量,以后有用(一个存储最大值,一个存储i的值)
int main(int argc, char** argv)
{
int n;//定义n
cin>>n;//输入n
string name[n];//由于名字是字符串,所以用string来存储。因为不是一个名字,所以要用字符数组
int chi[n];//chi是chinese的缩写,代表语文成绩
int mat[n];//mat是maths的缩写,数学成绩
int eng[n];//eng是english的缩写,英语
for (int i=0;i<n;i++)//循环n次,每次都要输入
{
cin>>name[i]>>chi[i]>>mat[i]>>eng[i];//输入名字,语文成绩,数学成绩,英语成绩
}
return 0;
}
现在开始,才是重点。定义一个变量a,用来存储每个人的成绩总和。加上一个判断,判断现在的成绩是不是最大值,然后存储最大值在第几位,也就是当前i的值。最后,把它再套进一个循环里,输出结果即可。
#include <bits/stdc++.h>
using namespace std;
int maxx,maxi;//两个变量,以后有用(一个存储最大值,一个存储i的值)
int main(int argc, char** argv)
{
int n;//定义n
cin>>n;//输入n
string name[n];//由于名字是字符串,所以用string来存储。因为不是一个名字,所以要用字符数组
int chi[n];//chi是chinese的缩写,代表语文成绩
int mat[n];//mat是maths的缩写,数学成绩
int eng[n];//eng是english的缩写,英语
for (int i=0;i<n;i++)//循环n次,每次都要输入
{
cin>>name[i]>>chi[i]>>mat[i]>>eng[i];//输入名字,语文成绩,数学成绩,英语成绩
}
for (int i=0;i<n;i++) {//再次循环
int a=chi[i]+mat[i]+eng[i];//定义a来存储当前学生的总分
if (a>maxx) {//如果当前学生的总分大于之前学生总分的最大值
maxx=a;//将当前学生总分的最大值存储起来
maxi=i;//这一步很重要,要想输出,必须要存储最大值在哪一位(也就是i)
}
}
cout<<name[maxi]<<" "<<chi[maxi]<<" "<<mat[maxi]<<" "<<eng[maxi];//最后,输出名字和各科成绩
return 0;
}
这一题就写完了。个人感觉我的写法已经算最简写法了。基本是小白也可以看懂。如果你有更简的写法,欢迎讨论。
代码
#include <bits/stdc++.h>
using namespace std;
int maxx,maxi;
int main(int argc, char** argv)
{
int n;
cin>>n;
string name[n];
int chi[n];
int mat[n];
int eng[n];
for (int i=0;i<n;i++)
{
cin>>name[i]>>chi[i]>>mat[i]>>eng[i];
}
for (int i=0;i<n;i++) {
int a=chi[i]+mat[i]+eng[i];
if (a>maxx) {
maxx=a;
maxi=i;
}
}
cout<<name[maxi]<<" "<<chi[maxi]<<" "<<mat[maxi]<<" "<<eng[maxi];
return 0;
}