P5740 【深基7.例9】最厉害的学生 题解

清风雪月

2021-09-24 18:14:48

Personal

第三篇不可提交题解的题解第三篇文章

进入正题

这是一道很明显的排序题\ 每个学生一共包括6个元素,分别是名字,语文成绩,数学成绩,英语成绩,编号和总成绩,这么多元素,显然结构体是最适用的

struct xs{
    int a,b,c,z,h;
    string m;
};

a,b,c分别是语文,数学,英语,z为总成绩,h为编号,m为名字

接下来是重头戏!!!\ 在这种很多数据的题目,系统本身的sort不是非常的适用(当然你也可以用,你要用我不反对,因为这也可以,但是我不用)\ 因为数据比较小,因此这里我选用了冒泡排序,根据总量和编号来排序

for(int i=1;i<n;i++)记住千万不要写等于号
    for(int j=i+1;j<=n;j++)
    {
        if(q[i].z<q[j].z)swap(q[i],q[j]);
        else if(q[i].z==q[j].z)
        {
            if(q[i].h>q[j].h)swap(q[i],q[j]);
        }
    }

下面上代码,没有注释,想复制请先看一看解析再领代码哦

//~柠月~
#include<bits/stdc++.h>
using namespace std;
struct xs{
    int a,b,c,z,h;
    string m;
};
xs q[1001];
int n;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        q[i].h=i; 
        cin>>q[i].m>>q[i].a>>q[i].b>>q[i].c;
        q[i].z=q[i].a+q[i].b+q[i].c;
    }
    for(int i=1;i<n;i++)
    for(int j=i+1;j<=n;j++)
    {
        if(q[i].z<q[j].z)swap(q[i],q[j]);
        else if(q[i].z==q[j].z)
        {
            if(q[i].h>q[j].h)swap(q[i],q[j]);
        }
    }
    cout<<q[1].m<<" "<<q[1].a<<" "<<q[1].b<<" "<<q[1].c;
    return 0;
}