第2题 结构体多关键字排序2

买奖品(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;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值