PAT A1012 The Best Rank

本文详细解析了PATA1012最佳排名问题的解决思路和C++实现代码,通过定义全局变量和自定义比较函数,利用sort函数进行多条件排序,实现了对学生的综合排名和单项排名的准确计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PAT A1012 The Best Rank

导言

题目不赘述,直接上思路+代码。本题是复现晴神笔记思想。

要点

    首先定义题目,属于排序题,C++排序题建议使用sort函数来排序。
	1.观察输入条件,ID+C+M+E数据,观察输出条件,优先级A > C > M > E,为方便起见定义数组grade[4]来存储
	2.大数组定义在main函数外。因为main函数开辟的内存空间有限
	3.比较函数中虽然没有传入now,但是now可以作为全局变量出现在比较函数中
	4.若二人并列第一,则二人都是第一,则第二不存在,接下来的就是第三
	5.因平均数无出现必要,排序可以直接用和,还避免平均数精度的意外

代码

#include<bits/stdc++.h>
using namespace std;
struct student{
    int id;
    int grade[4];
}stu[2010];
int now;//全局变量的功劳
char ans[4]={'A','C','M','E'};
int ranking[10000000][4]={0};
bool cmp(student a, student b){
    return a.grade[now]>b.grade[now];
}
int main(){
    int N,M;
    cin>>N>>M;
    for(int i=0;i<N;i++){
        cin>>stu[i].id>>stu[i].grade[1]>>stu[i].grade[2]>>stu[i].grade[3];
        stu[i].grade[0]=stu[i].grade[1]+stu[i].grade[2]+stu[i].grade[3];
    }
    for(now=0;now<4;now++){
        sort(stu,stu+N,cmp);
        ranking[stu[0].id][now]=1;
        for(int i=1;i<N;i++){
            if(stu[i].grade[now]==stu[i-1].grade[now])
                ranking[stu[i].id][now]=ranking[stu[i-1].id][now];
            else
                ranking[stu[i].id][now]=i+1;
        }
    }
    int query;
    for(int i=0;i<M;i++){
        cin>>query;
        int min;
        if(!ranking[query][0])
            cout<<"N/A"<<endl;
        else{
            min=1000;
            int minnumber;
            for(int j=0;j<4;j++){
                if(ranking[query][j]<min){
                    min=ranking[query][j];
                    minnumber=j;}
            }
            cout<<min<<" "<<ans[minnumber]<<endl;
        }

    }
   return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值