标签:字符串 数字 个学生 abc freopen 数学 ack ios return
编写一个程序,读入 N 个同学的姓名和语数外三门功课的单科成绩,对其按照一定的排序规则排序形成一张成绩表(先按总分从高到低排序,总分相同则按语文成绩由高到低排序,仍然相同则按数学成绩由高到低排序,若总分和单科成绩均相同则最后按姓名的字典序排序)。最后给定一个数字 K(K<=N) ,输出在这张排好序的成绩表中位置在第 K 位的同学的姓名和总分。
字典序举例说明:
abc > abd
a > aa
2
tom 90 91 92
lucy 91 90 92
1
lucy 273
4
lily 90 100 88
jack 87 79 95
hanz 90 89 71
david 90 89 71
4
hanz 250
#include<algorithm>
#include<iostream>
using namespace std;
struct student{
string name;
int chinese;
int math;
int english;
};
student s[1025];
bool compare(student a,student b){
if(a.chinese+a.english+a.math!=b.english+b.chinese+b.math){
return a.chinese+a.english+a.math>b.english+b.chinese+b.math;
}else{
if(a.chinese!=b.chinese){
return a.chinese>b.chinese;
}else{
if(a.math!=b.math){
return a.math>b.math;
}else{
if(a.english!=b.english){
return a.english>b.english;
}else{
return a.name<b.name;
}
}
}
}
}
int main(){
int n;
//freopen("input.txt","r",stdin);
cin>>n;
for(int i=0;i<n;i++){
cin>>s[i].name>>s[i].chinese>>s[i].math>>s[i].english;
}
sort(s,s+n,compare);
int k;
cin>>k;
cout<<s[k-1].name<<" "<<s[k-1].chinese+s[k-1].english+s[k-1].math;
return 0;
}
标签:字符串 数字 个学生 abc freopen 数学 ack ios return
原文地址:http://www.cnblogs.com/bernieloveslife/p/7911751.html