【題解】Luogu P1093 【奖学金】

面向对象大法好(C++版)
结构体什么的就是水(误,毕竟是Java过来的难民)
重点是比较函数的书写
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    //类的定义
    class Student{
    public:
        int number;
        int chinese;
        int math;
        int english;
        int total;
    };
    //用于语文成绩的比较
    bool cmp1(int a,int b){
        return a > b;
    }
    //用于学号的比较
    bool cmp2(int a,int b){
        return a < b;
    }
    //之所以要分开,是因为不分开有一个点过不去
    //真·迷之比较函数
    bool compare(Student s1,Student s2){
        if(s1.total == s2.total && s1.chinese != s2.chinese){//如果总分相同而语文成绩不同
            return cmp1(s1.chinese,s2.chinese) > 0;//语文成绩高的在前
        }else if(s1.total == s2.total && s1.chinese == s2.chinese){//如果总分相同且语文成绩相同
            return cmp2(s1.number,s2.number) > 0;//学号小的在前
        }else{//如果总分在前
            return s1.total > s2.total;//总分大的在前
        }
    }
    int main(){
        int n;
        scanf("%d",&n);
        Student s[300];//对象数组,如果不会面向对象的就去问度娘吧
        //输入,预处理
        int delta1,delta2,delta3;
        for(int i = 0;i < n;i++){
            s[i].number = i + 1;
            scanf("%d %d %d",&delta1,&delta2,&delta3);
            s[i].chinese = delta1;
            s[i].math = delta2;
            s[i].english = delta3;
            s[i].total = s[i].chinese + s[i].math + s[i].english;
        }
        //真·sort排序
        sort(s,s + n,compare);
        //输出
        int delta4,delta5;
        for(int i = 0;i < 5;i++){
            delta4 = s[i].number;
            delta5 = s[i].total;
            printf("%d %d\n",delta4,delta5);
        }
        //优雅的结束
        return 0;
}