码迷,mamicode.com
首页 > 其他好文 > 详细

PAT 甲级 A1012 (2019/02/15)

时间:2019-02-24 10:41:37      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:else   信息   scanf   query   clu   依次   cst   英语   space   

#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\n");    
        }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\n", Rank[query][k], course[k]);
        }
    }   
    return 0;
}

PAT 甲级 A1012 (2019/02/15)

标签:else   信息   scanf   query   clu   依次   cst   英语   space   

原文地址:https://www.cnblogs.com/zjsaipplp/p/10425255.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!