zoukankan      html  css  js  c++  java
  • 【每天一道PAT】1012 The Best Rank

    思路

    本题考查结构体排序
    练习使用algorithm中的sort用法
    1.使用结构体存储每个学生的各科成绩,各科排名
    2.使用sort录入各科排名,这里注意!有可能出现1、2、2、4的情况,记得跳过
    3.对每个学生的排名进行比较找到最优排名
    4.输出结果

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    int M,N;//记录录入总人数以及查找总人数
    char course[5] = {'C', 'M', 'E', 'A'};//存储各个科目名称
    struct node{
        int id;
        int score[4];
        int rank[4];
        int bestrank;
        int bestcourse;
    }stu[2005];
    int f = 0;//更新f对每个科目进行排名
    bool cmp1(node a, node b)
    {
        return a.score[f]>b.score[f];
    }
    void read_rank()
    {
        for (int i = 0; i < M; ++i)
        {
            cin>>stu[i].id >>stu[i].score[0] >>stu[i].score[1] >>stu[i].score[2];
            stu[i].score[3] = (stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;
        }
        for (f = 0; f <=3; ++f) {
            sort(stu,stu + M,cmp1);
            stu[0].rank[f] = 1;
            //此处注意当成绩相同时,排名相同且排名跳过
            int index = 1;
            for (int j = 1; j < M; ++j)
            {
                if(stu[j].score[f]!=stu[j-1].score[f])
                {
                    index++;
                    stu[j].rank[f]=index;
                }
                else
                {
                    stu[j].rank[f]=index;
                    index++;
                }
            }
        }
    }
    int main()
    {
        int search_id;
        scanf("%d %d",&M,&N);
        read_rank();
        for (int i = 0; i < M; ++i)
        {
            int flag = 3;
            int min = stu[i].rank[3];//由于A的优先权最大,先将最小记录为A
            for (int j = 0; j < 3; ++j)
            {
                if(stu[i].rank[j] < min)
                {
                    min = stu[i].rank[j];//更新最小值
                    flag = j;//找到最小值对应科目
                }
            }
            stu[i].bestcourse = flag;
            stu[i].bestrank = stu[i].rank[flag];
        }
        for (int j = 0; j < N; ++j)
        {
            int k;
            scanf("%d",&search_id);
            for (k = 0; k < M; ++k)
            {
                if(search_id == stu[k].id) break;//查找学生id
            }
            if(k == M) printf("N/A
    ");
            else
                printf("%d %c
    ",stu[k].bestrank,course[stu[k].bestcourse]);
        }
        return 0;
    }
    

  • 相关阅读:
    POJ 2513 (Trie树+欧拉通路+并查集判断连通)
    归并排序及序列逆序数
    POJ 2442 Sequence (堆+K路归并)
    POJ 2513 (Trie树+欧拉通路+并查集判断连通)
    J2EE概述
    J2EE概述
    J2EE概述
    学习视频资料下载论坛
    J2EE概述
    J2EE概述
  • 原文地址:https://www.cnblogs.com/xinyuLee404/p/12682170.html
Copyright © 2011-2022 走看看