题解
2023-07-20 16:57:53
发布于:上海
50阅读
0回复
0点赞
语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面
--
根据这段话可以得出,我们判断排名的顺序是:
1.判断总分,如果相同下一段,不相同的话从高到低;
2.判断语文成绩,如果相同下一段,不相同的话从高到低;
3.根据学号从小到大
附上根据这个流程的代码:
int cmp(Student x,Student y){
if(x.sum!=y.sum){
return x.sum>y.sum;
}else if(x.sum == y.sum){
if(x.yu!=y.yu){
return x.yu>y.yu;
}else if(x.yu == y.yu){
return x.num<y.num;
}
}
}
好,判断成绩的部分已经完成;
学号可以在输入的时候; a[i].num(学号) = i+1;
下面是输入模块,题目中定义了一个“n”变量
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].yu>>a[i].shu>>a[i].eng;
a[i].sum = a[i].yu+a[i].shu+a[i].eng;
a[i].num = i+1;
}
然后把sort还有输出就差不多了:
下面是总体代码:
#include <bits/stdc++.h>
using namespace std;
struct Student{
int yu,shu,eng;
int sum,num;
}a[305];
int cmp(Student x,Student y){
if(x.sum!=y.sum){
return x.sum>y.sum;
}else if(x.sum == y.sum){
if(x.yu!=y.yu){
return x.yu>y.yu;
}else if(x.yu == y.yu){
return x.num<y.num;
}
}
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].yu>>a[i].shu>>a[i].eng;
a[i].sum = a[i].yu+a[i].shu+a[i].eng;
a[i].num = i+1;
}
sort(a,a+n,cmp);
for(int i=0;i<5;i++){
cout<<a[i].num<<" "<<a[i].sum<<endl;
}
return 0;
}
PS::注意一下struct变量名还有cmp判断;
struct 代码:
struct Student{
int yu,shu,eng;
int sum,num;
}a[305];
这里空空如也
有帮助,赞一个