面向对象大法好(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;
}
相关