成绩再次排序

成绩再次排序

华南理工大学机试题

题目描述

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;
}

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值