美文网首页
PAT-The best rank

PAT-The best rank

作者: Fattyu | 来源:发表于2017-11-23 23:32 被阅读0次

    题目介绍:
    给n个考生的3门课 的成绩,还有一个平均分有3门可成绩得到。有m个查询,给一个考生的id ,输出他最高的排名对应的是哪一门课。
    题目重点还是对数据的存放处理,还有不同条件下的排序。

    #include<stdio.h>
    #include<iostream>
    #include<math.h>
    #include<algorithm>
    
    using namespace std;
    struct Student{
        int id;
        int grade[4];
    }stu[2010];
    
    char coures[4]={'A','B','M','E'};
    int Rank[1000000][4]={0};
    int now;
    bool cmp(Student a,Student b)//分数递减排序
    {
        return a.grade[now]>b.grade[now];
    }
    
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=0;i<n;i++)
        {
            scanf("%d%d%d%d",&stu[i].id,&stu[i].grade[1],&stu[i].grade[2],&stu[i].grade[3]);
            stu[i].grade[0]=round((stu[i].grade[1]+stu[i].grade[2]+stu[i].grade[3])/3.0)+0.5;
        }
        for(now=0;now<4;now++)
        {
            sort(stu,stu+n,cmp);
            Rank[stu[0].id][now]=1;
            for(int i=1;i<n;i++)
            {
                if(stu[i].grade[now]==stu[i-1].grade[now])
                    Rank[stu[i].id][now]=Rank[stu[i].id][now];
                else
                    Rank[stu[i].id][now]=i+1;
            }
        }
        int query;
        for(int i=0;i<m;i++)
        {
            scanf("%d",&query);
            if(Rank[query][0]==0)
                printf("N/A\n");
            else
            {
                int k=0;
                for(int j=0;j<4;j++)
                {
                    if(Rank[query][j]<Rank[query][k])
                        k=j;
                }
                printf("%d %c\n",Rank[query][k],coures[k]);
            }
        }
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:PAT-The best rank

          本文链接:https://www.haomeiwen.com/subject/xqgtbxtx.html