题目描述&&样例
你自己看原题链接,我要写简洁的题解
算法
结构题排序(注释在程序)
https://blog.csdn.net/qq_27168967/article/details/109667884
如果你连结构体排序都不会,你看看以上文章
C++ 代码
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct student//结构体
{
int Maths,Chinese,English,Score,school_number; //英语看不懂的话:分别定义了每个学生的数学,语文,英语,总分和学号。
}a[310];
int n;
int cmp(student a,student b) //两个结构题比较,这个函数是排序依据
{
if(a.Score!=b.Score) return a.Score>b.Score; //若两人总分已能见分晓,返回总分大的
else if(a.Chinese!=b.Chinese) return a.Chinese>b.Chinese; //否则在比较语文成绩
else return a.school_number<b.school_number; //都相同的话学号小的排前面
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&a[i].Chinese,&a[i].Maths,&a[i].English);//读入每个人的语,数,英成绩
a[i].school_number=i; //记录学号
a[i].Score=a[i].Chinese+a[i].Maths+a[i].English;//算该人的总分
}
sort(a+1,a+n+1,cmp); //结构题排序
for(int i=1;i<=5;i++) //享受成果(输出前5)
{
printf("%d %d\n",a[i].school_number,a[i].Score); //只需输出学号和总分
}
return 0;
}