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)的主要内容,如果未能解决你的问题,请参考以下文章

PAT 甲级 A1062 (2019/02/15)

PAT 甲级 A1062 (2019/02/15)

PAT A1012 The Best Rank

算法学习记录-排序题PAT A1012The Best Rank

pat甲级75分在啥水平

pat甲级没做出来没有分吗