P1903 奖学金题解

众所周知,这是一道通过struct结构体进行排序的题目

思路:平常的输入。。

  然后定义一个结构体grade,存放每个学生的学号、三科成绩、(也可以只存语文成绩和总分和学号)

自定义cmp函数,通过三层判断来确定排序的先后顺序,然后输出前五个学生

易错点

1.把学号当编号存而不是存入结构体里面,这样在sort之后就重新改变学号了,学号和人就不对应了

2.在定义cmp时搞错顺序(大于小于号)

上AC代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n;
struct grade{
    int chinese,math,eng,xuehao;//都能读懂什么意思吧 
}human[301];//people也可以 
inline bool cmp0(grade a,grade b){//核心cmp0 
    if(a.chinese+a.math+a.eng!=b.chinese+b.eng+b.math)
//在不相等情况下的话 执行下一行程序,无论是大于还是小于都不执行 
        return a.chinese+a.math+a.eng>b.chinese+b.eng+b.math;
    else if(a.chinese!=b.chinese)return a.chinese>b.chinese;
//在总分相等的情况下执行这个判断,如果语文成绩不相等的话执行按语文成绩从大到小排序 
    else return a.xuehao<b.xuehao;//如果语文相等,就按学号从小到大排序
    //为什么这里多一个从小到大...好坑人 
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d%d",&human[i].chinese,&human[i].math,&human[i].eng);
        human[i].xuehao=i;
    }
    sort(human+1,human+1+n,cmp0);
    for(int i=1;i<=5;i++)
        printf("%d %d
",human[i].xuehao,human[i].chinese+human[i].eng+human[i].math);
        return 0;
}

完结撒花✿✿ヽ(°▽°)ノ✿

希望对各位像我一样的蒟蒻有帮助

推荐一个呗

原文地址:https://www.cnblogs.com/lbssxz/p/10927258.html