【洛谷】P5740 【深基7.例9】最厉害的学生

题目来源

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;
}

AC

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值