PAT-The best rank

题目介绍:
给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;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 清华大学美术学院的前身是创建于1956年的中央工艺美术学院,1999年并入清华大学。学院历史悠久,学科结构完整,教...
    59fb6eefc3e9阅读 6,815评论 0 5
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,261评论 25 709
  • 夜空抚慰着我的孤寂 陪我走过惆怅的四季 星星眨着疲惫的双眸 倾听着卑微的哀鸣 豪车碾压着我的灵魂 空中弥漫着狂野的...
    梦雪他乡阅读 3,712评论 17 48
  • ''吹红了桃花 吹绿了柳树 你在路上总会安慰谁 ...... 吹过玉门关 吹...
    罱海阅读 1,950评论 0 1
  • 安魂花绝对是一个另类。 她没有过人的武艺,却名列流星客栈三大掌柜之二。 她身子单薄,眉清目秀,虽非人间绝色,在江湖...
    道梦鱼阅读 3,114评论 0 2