思路:读入全部的数据之后,按照四个cmp函数对数组进行排序,给每生的4个科目的排名赋值,读入要检验的id后使用strcmp对数组中的id进行遍历(幸好这里数组大小和要检验的数目乘积不超过4万),如果找到了相同id,调用写好的得到bestRank的函数进行输出即可,没找到就输出“N\A”

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;const int maxn = 2010;struct stud{char id[7] = "";int C = 0;int Crank = 0; int M = 0;int Mrank = 0;int E = 0;int Erank = 0;int A = 0;int Arank = 0;
}studs[maxn];bool cmp_C(stud a,stud b){if(a.C!=b.C)return a.C>b.C;else return strcmp(a.id,b.id)<0;
}bool cmp_M(stud a,stud b){if(a.M!=b.M)return a.M>b.M;else return strcmp(a.id,b.id)<0;
}bool cmp_E(stud a,stud b){if(a.E!=b.E)return a.E>b.E;else return strcmp(a.id,b.id)<0;
}bool cmp_A(stud a,stud b){if(a.A!=b.A)return a.A>b.A;else return strcmp(a.id,b.id)<0;
}void getBest(stud s){int bestRank = 2001;int bestSubject = '*';if(s.Arank<bestRank){bestRank = s.Arank;bestSubject = 'A';}if(s.Crank<bestRank){bestRank = s.Crank;bestSubject = 'C';}if(s.Mrank<bestRank){bestRank = s.Mrank;bestSubject = 'M';}if(s.Erank<bestRank){bestRank = s.Erank;bestSubject = 'E';}printf("%d %c\n",bestRank,bestSubject);
}int main(){int n,m;scanf("%d %d",&n,&m);for(int i=0;i<n;i++){scanf("%s %d %d %d",studs[i].id,&studs[i].C,&studs[i].M,&studs[i].E);studs[i].A = (studs[i].C+studs[i].M+studs[i].E)/3;}//按照C进行排序sort(studs,studs+n,cmp_C);//给Crank赋值 studs[0].Crank = 1;for(int i=1;i<n;i++){if(studs[i].C == studs[i-1].C)studs[i].Crank = studs[i-1].Crank;else studs[i].Crank = i+1;}//同样对MEA进行相同操作//M sort(studs,studs+n,cmp_M);studs[0].Mrank = 1;for(int i=1;i<n;i++){if(studs[i].M == studs[i-1].M)studs[i].Mrank = studs[i-1].Mrank;else studs[i].Mrank = i+1;}//Esort(studs,studs+n,cmp_E);studs[0].Erank = 1;for(int i=1;i<n;i++){if(studs[i].E == studs[i-1].E)studs[i].Erank = studs[i-1].Erank;else studs[i].Erank = i+1;}//Asort(studs,studs+n,cmp_A);studs[0].Arank = 1;for(int i=1;i<n;i++){if(studs[i].A == studs[i-1].A)studs[i].Arank = studs[i-1].Arank;else studs[i].Arank = i+1;}//开始检验char input[7] = ""; for(int i=0;i<m;i++){scanf("%s",input);int hasFound = false;for(int j=0;j<n;j++){if(strcmp(studs[j].id,input)==0){getBest(studs[j]);hasFound = true;}}if(!hasFound)printf("N/A\n");} return 0;
}

1012 The Best Rank相关推荐

  1. PAT甲级1012 The Best Rank :[C++题解]4个成绩取排名最低:排序、二分(好题)

    文章目录 题目分析 题目链接 题目分析 遇到的问题:信息存在结构体(✖)中,然后排名呢?需要分别对 C.M.E.A排四次吗? 这里成绩的存储 用二维数组 vector<int> q[4]; ...

  2. PAT 1012 The Best Rank (25 分)

    1012 The Best Rank (25 分) 今天给大家分享的是PAT甲级的一道小题,设计题 原题请点击我 简单翻译: 设计一个排名表,这个表中以学生ID为主键,C表示程序设计语言的成绩,M表示 ...

  3. PAT甲级真题(结构体排序)——1012. The Best Rank (25)

    1012. The Best Rank (25) To evaluate the performance of our first year CS majored students, we consi ...

  4. PAT 1012 The Best Rank

    参考自: https://www.nowcoder.com/questionTerminal/5a5281aef52a4f6f943929c05ba71c11 题目链接: 1012 The Best ...

  5. PAT 甲级 1012 The Best Rank

    PAT 甲级 1012 The Best Rank To evaluate the performance of our first year CS majored students, we cons ...

  6. 【解析】1012 The Best Rank (25 分)

    立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 To evaluate the performance of our first year CS majored students ...

  7. 1012 The Best Rank (25)

    题目描述: To evaluate the performance of our first year CS majored students, we consider their grades of ...

  8. 1012 The Best Rank (25 分)【难度: 中 / 知识点: 排序 前缀和】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805502658068480 解析: 这里的每一项排名有一个坑的点,就是 ...

  9. 【PAT甲级 排序】1012 The Best Rank (25 分) C++ 全部AC

    题目 中规中矩的一道题.排名的顺序一开始没太明白,但是理解之后写起来挺流畅的,没什么坑. 解题思路:题目会给出所有学生所有科目的成绩.想要看分学生的学号. 我们要先给这些学生单科成绩排序,算出它们的单 ...

最新文章

  1. MIT发布2018年全球10大突破性技术!
  2. Exchange2010配置实验(六)部署forefront到edge服务器
  3. 自动化工具之二:win32gui
  4. 修改mysql数据库的编码格式
  5. python-sdk-demo的打包
  6. 零拷贝机制在文件传输中的使用手法
  7. 心胸狭窄小肚鸡肠的男人_为心胸开阔的教育者编写新的剧本
  8. pythonif有多个条件怎么办,Python if有多个条件怎么办
  9. Q96:PT(3.3):大理石纹理(Marble Texture)
  10. OC开发实例变量的访问控制详解
  11. DS18B20引脚 实物引脚 (千万不要接反啊)
  12. 清除html宏病毒,手动清除EXCEL宏病毒的方法
  13. CDUTCM OJ 2017第一次月赛
  14. 大数据工具主要分为哪几类,每类中具体有哪些工具?
  15. JDBC Mybatis 调用 ORACLE 存储过程 函数 返回 varray 类型 function return varray out varray
  16. html怎么在文字中加小方框,css之列表数据前加上小方框
  17. 【转载】发一篇能激励大家拼搏的文章,文中内容属实
  18. win8系统计算机属性在哪个文件夹,Win8如何更改文件夹的只读或系统属性
  19. linux32系统下载地址,deepin 15.3 32位ISO下载地址,深度系统最后支持32位的版本
  20. 【Simulink】粒子群算法(PSO)整定PID参数(附代码和讲解)

热门文章

  1. Dispatch 执行ABC任务,执行完成之后刷新UI,指定任务D
  2. Android笔记之使用LocationManager获取经纬度
  3. 程序员也想改 Lottie 动画?是的!
  4. Unity----Scene加载问题
  5. Message、Handler、Message Queue、Looper之间的关系
  6. 有关java的一些话
  7. 使用Windows远程登录Ubuntu
  8. 国外厂商在行业客户上输单的原因
  9. 使用SQL Server维护计划实现数据库定时自动备份
  10. 扫码下单支持同桌单人点餐FAQ