#排序#结构体排序(sort函数)
P1093 [NOIP2007 普及组] 奖学金
题目链接:https://www.luogu.com.cn/problem/P1093
这题的学生和成绩的关系可以看出用结构体是十分方便的,但是在之前只使用sort函数对数组进行排序
如果使用sort函数对结构体进行排序,需要自己写出一个排序规则函数cmp
此题的排序规则
/1按总分从高到低排序
//2如果两个同学总分相同,再按语文成绩从高到低排序
//3如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面
则cmp函数如下
1 bool cmp(stu a,stu b)//返回值为1的排序在前 2 { 3 if(a.sum>b.sum) return 1; 4 else if(a.sum<b.sum) return 0; 5 else//总分相同 6 { 7 if(a.c>b.c) return 1; 8 else if(a.c<b.c) return 0; 9 else//语文相同 10 { 11 if(a.num>b.num) return 0; 12 else return 1; 13 } 14 } 15 }
int main (){ //先根据输入的3门课然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分的成绩计算总分 int n; cin>>n ;//获取学生人数 //第一步先将所有学生三门成绩的总分计算出来然后存入结构体 for(int i=1;i<=n;i++) { student[i].num=i;//录入编号 cin>>student[i].c>>student[i].m>>student[i].e;//输入 student[i].sum=student[i].c+student[i].m+student[i].e;//计算总分 } //1按总分从高到低排序 //2如果两个同学总分相同,再按语文成绩从高到低排序 //3如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面 sort(student+1,student+1+n,cmp);//对所有同学的总分进行排序 /*for(int i=n;i>=1;i--){ cout<<i<<" "<<tot[i]<<endl; } */ for(int i=1;i<=5;i++) cout<<student[i].num<<' '<<student[i].sum<<endl; return 0;
浙公网安备 33010602011771号