有一学生成绩表,包括学号、姓名、3门课程成绩。请按如下规则排序:按总成绩降序排序,若总成绩相同,则按姓名升序排序。
标签:
有一学生成绩表,包括学号、姓名、3门课程成绩。请按如下规则排序:按总成绩降序排序,若总成绩相同,则按姓名升序排序。
首先输入一个整数n(1<=n<=100),表示学生人数;
然后输入n行,每行包含一个学生的信息:学号(12位)、姓名(不含空格且不超过20位),以及3个整数,表示3门课成绩,数据之间用空格隔开。
输出排序后的成绩单,格式见输出样例。
#include<iostream>
#include<stdio.h>
#include<string>
#include<algorithm>
using namespace std;
struct student
{
char sno[13];
string name;
int grade[3];
int sum;
};
int cmp(student a,student b)
{
if(a.sum!=b.sum)
return a.sum>b.sum;//降序
else
{
return a.name<b.name;//升序
}
}
int main()
{
int n,i;
student a[100];
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
{
cin>>a[i].sno>>a[i].name>>a[i].grade[0]>>a[i].grade[1]>>a[i].grade[2];
a[i].sum=a[i].grade[0]+a[i].grade[1]+a[i].grade[2];
}
sort(a,a+n,cmp);
for(i=0;i<n;i++)
{
cout<<a[i].sno<<" "<<a[i].name<<" "<<a[i].grade[0]<<" "<<a[i].grade[1]<<" "<<a[i].grade[2]<<" "<<a[i].sum<<endl;
}
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/zuguodexiaoguoabc/article/details/45247829