美文网首页
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