成绩再次排序
华南理工大学机试题
题目描述
Time Limit: 1000 ms
Memory Limit: 256 mb
输入几行姓名,语数英成绩。先按总分高到低排序,总分一样的按照语文高的排前面,又一样的按照数学,最后英语。若都一样按出现的顺序输出。
输入输出格式
输入描述:
第一行一个数字n,表示学生的个数。 接下来n行包含姓名,语数英成绩,用空格隔开。(n<=1000)
输出描述:
排序后的顺序输出
输入输出样例
输入样例#:
3 kangkang 60 59 58 yangyang 60 59 58 jian 70 60 60
输出样例#:
jian 70 60 60 kangkang 60 59 58 yangyang 60 59 58
解题方法
思路
根据题目要求确定sort函数排序方式
代码
#include <bits/stdc++.h>
using namespace std;
struct node{
string name;
int ch;
int math;
int en;
int sum;
};
int cmp(node n1,node n2){
if(n1.sum==n2.sum){
if(n1.ch==n2.ch){
if(n1.math==n2.math){
return n1.en>n2.en;
}
return n1.math>n2.math;
}
return n1.ch>n2.ch;
}
return n1.sum>n2.sum;
}
int main(){
int n;
while(cin>>n){
node arr[n];
for(int i=0;i<n;i++){
cin>>arr[i].name>>arr[i].ch>>arr[i].math>>arr[i].en;
arr[i].sum = arr[i].ch+arr[i].math+arr[i].en;
}
stable_sort(arr,arr+n,cmp);
for(int i=0;i<n;i++){
cout<<arr[i].name<<" "<<arr[i].ch<<" "<<arr[i].math<<" "<<arr[i].en<<endl;
}
}
return 0;
}