买奖品(sort)
题目描述:
班上刚测试了几门课,现在信息技术的老师要分析一些功课之间的成绩关系,看看每个人的信息技术课排名以及他的数学排名,并按信息技术课的成绩从高分到低分排列(数据中保证任意一学科中没有两个人的这门课成绩是一样的)。老师把任务交给了信息学最好的你,请你编程完成这个任务。
输入文件
第一行一个整数N,表示共有N个同学的成绩。
后面有N行,每行4个整数,分别表示一个同学的:语文、数学、英语、信息技术成绩。
输出文件
共N行,每行6个数据,分别对应一个同学的:语文、数学、英语、信息技术成绩 和信息技术及数学的排名。
数据范围
1<=N<=45;
每个成绩C的范围为:0<=C<=120;
样例
输入 | 3 90 95 89 110 95 120 78 115 96 97 103 92 | |
输出 | 95 120 78 115 1 1 96 87 103 92 3 2 |
任务
1.用结构体储存班上同学的语文、数学、英语、信息技术成绩和同学序号;
2.用int储存班上同学的人数n;
3.写出结构体排序的cmp(题中,先按数学排名搞好同学序号,再按信息排名)
4.输出最后的排序结果(语文、数学、英语、信息技术成绩 和信息技术及数学的排名)
#include<bits/stdc++.h>
using namespace std;
struct data
{
long long yw;
long long sx;
long long yy;
long long xh;
long long xx;
};
data sorts[309];
bool px(data x,data y)
{
return x.sx>y.sx;
}
bool ps(data x,data y)
{
return x.xx>y.xx;
}
long long n;
int main()
{
cin>>n;
for(long long i=1; i<=n; i++)
{
scanf("%lld%lld%lld%lld",&sorts[i].yw,&sorts[i].sx,&sorts[i].yy,&sorts[i].xx);
}
sort(sorts+1,sorts+1+n,px);
for(long long i=1; i<=n; i++)
sorts[i].xh=i;
sort(sorts+1,sorts+1+n,ps);
for(long long i=1; i<=n; i++)
{
printf("%lld %lld %lld %lld %lld %lld\n",sorts[i].yw,sorts[i].sx,sorts[i].yy,sorts[i].xx,i,sorts[i].xh);
}
return 0;
}