zoukankan      html  css  js  c++  java
  • 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;
    }

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

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

    推荐一个呗

  • 相关阅读:
    学生管理系统后感
    数据库是什么鬼,怎么连接,怎么搞
    nIce 不看会后悔的o!
    那些年披巾斩浪的数据库
    day82
    day81
    day80
    day79
    day78
    day77
  • 原文地址:https://www.cnblogs.com/lbssxz/p/10927258.html
Copyright © 2011-2022 走看看