买奖品(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 90 95 89 110 2 3 96 87 103 92 3 2 |
程序(此题难点主要在有两个结构体,但总体要比第一题简单)
#include<bits/stdc++.h>
using namespace std;
struct pm
{
int c,m,e,z,x,l,k;
}s[500];
bool cmp(pm _x,pm _y)
{
return (_x.m>_y.m);
}
bool csb(pm _f,pm _g)
{
return (_f.z>_g.z);
}
int n,pos1,pos2,t;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>s[i].c>>s[i].m>>s[i].e>>s[i].z;
}
sort(s+1,s+1+n,cmp);
for(int i=1;i<=n;i++)
s[i].l=i;
sort(s+1,s+1+n,csb);
for(int i=1;i<=n;i++)
{
s[i].k=i;
}
for(int i=1;i<=n;i++)
{
cout<<s[i].c<<" "<<s[i].m<<" "<<s[i].e<<" "<<s[i].z<<" "<<s[i].k<<" "<<s[i].l<<endl;
}
return 0;
}