PAT 甲级 A1012 (2019/02/15)
Posted zjsaipplp
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT 甲级 A1012 (2019/02/15)相关的知识,希望对你有一定的参考价值。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct Stu_info{
int id; //存放 id 的六位整数
int score[4]; //存放 C M E A 的(分数)数组
}stu[2010];
char course[4] = {'A', 'C', 'M', 'E'}; //将平均分A存在course[0]中,便于枚举
int Rank[10000000][4] = {0}, now;
bool cmp(Stu_info a, Stu_info b){
/* 升序排列,如果改为 return a>b; 则为降序 */
return a.score[now] > b.score[now];
}
int main(){
int m, n;
scanf("%d%d", &m, &n);
for(int i = 0; i < m; i++){
/* 依次读入 id C M E, 且计算品均分 A */
scanf("%d%d%d%d", &stu[i].id, &stu[i].score[1], &stu[i].score[2], &stu[i].score[3]);
stu[i].score[0] = (stu[i].score[1] + stu[i].score[2] + stu[i].score[3]) / 3;
}
for(now = 0; now < 4; now++){
/* now = 0; 时,对 平均分 A 从大到小排序
now = 1; 时,对 C C 从大到小排序
now = 2; 时,对 数学 M 从大到小排序
now = 3; 时,对 英语 E 从大到小排序 */
sort(stu, stu + m, cmp);
/* 排完序号,将分数最高的设置为 1 */
Rank[stu[0].id][now] = 1;
for(int i = 1; i < m; i++){
if(stu[i].score[now] == stu[i-1].score[now]){
/* 若与前一位考生分数相同,则他们的排名相同 */
Rank[stu[i].id][now] = Rank[stu[i-1].id][now];
}else{
/* 否则,为其设置正确的排名 */
Rank[stu[i].id][now] = i + 1;
}
}
}
int query; //查询的考生 id
for(int i = 0; i < n; i++){
scanf("%d", &query);
if(Rank[query][0] == 0){/* 如果查询不到,则 N/A */
printf("N/A
");
}else{ /* 否则,输出他们的信息 */
int k = 0;
for(int j = 0; j < 4; j++){
if(Rank[query][j] < Rank[query][k]){
/* j = 0; 查询 Rank[query][0] 的值,最小的即为排名;
以此类推,得到其他同学的各科排名
*/
k = j;
}
}
printf("%d %c
", Rank[query][k], course[k]);
}
}
return 0;
}
以上是关于PAT 甲级 A1012 (2019/02/15)的主要内容,如果未能解决你的问题,请参考以下文章