给协会里的同学排成绩对于土豪学长来说总是一个很麻烦的事情,因为土豪学长不会使用excel表格,所以每次他都是手工排序的。现在协会的人数越来越多,手工排序变的不现实了,他希望你能够帮他写一个程序给同学们拍名次。考试的科目有语文,数学,英语,物理,化学,生物。首先按照总分排序,总分一样的按照语文分排序,语文分一样的按照数学排序,以此类推,科目的优先级:语文,数学,英语,物理,化学,生物,如果几门课的分数都一样,那么按照学生的编号排序(序号小的排前面)
给协会里的同学排成绩对于土豪学长来说总是一个很麻烦的事情,因为土豪学长不会使用excel表格,所以每次他都是手工排序的。现在协会的人数越来越多,手工排序变的不现实了,他希望你能够帮他写一个程序给同学们拍名次。考试的科目有语文,数学,英语,物理,化学,生物。首先按照总分排序,总分一样的按照语文分排序,语文分一样的按照数学排序,以此类推,科目的优先级:语文,数学,英语,物理,化学,生物,如果几门课的分数都一样,那么按照学生的编号排序(序号小的排前面)
有多组输入数据。 每组数据第一行一个数字n,表示学生的个数。接下来n行,每行6个整数,分别对应上面的六门科目。学生按照输入顺序从1到n编号。当n为0的时候结束。六门科目分数的范围从0到100(包含),0<=n<=10000
学生的id按照排名输出,每组数据的输出占一行。从第一名到最后一名输出。
3
100 100 100 100 100 100
99 99 99 99 99 99
88 88 88 88 88 88
0
1 2 3
xzx
分析:
1、题目意思很好理解,开始的时候想的太复杂了。
2、简单题,调用STL排序函数,重写cmp就搞定啦!
LANGUAGE:C++
CODE:
#include
#include
using namespace std;
struct node{
int num;
int g[6];
int sum;
};
int cmp(node a,node b)
{
if(a.sum==b.sum){
for(int i=0;i<6;i++){
if(a.g[i]!=b.g[i])
return a.g[i]>n&&n!=0)
{
node q[10005];
for(int i=0;i>q[i].g[j];
q[i].sum+=q[i].g[j];
}
q[i].num=i+1;
}
sort(q,q+n,cmp);
for(int i=n-1;i>=0;i--)
cout<