众所周知,这是一道通过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; }
完结撒花✿✿ヽ(°▽°)ノ✿
希望对各位像我一样的蒟蒻有帮助
推荐一个呗