PAT 1012. The Best Rank

本文介绍了一个使用C++实现的学生排名系统。该系统可以根据学生的不同科目成绩计算平均分,并确定每位学生在总平均分、数学、英语及计算机四类排名中的最佳排名及其对应的类别。文章通过具体的代码展示了如何进行数据输入、处理和输出。

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

水题 注意并列名次的处理

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
#define maxn 2222

typedef struct stu{
        char id[6];
        int c;
        int m;
        int e;
        int average;
        int rank;
        char rankclass;
        }stu;

int main()
{
        int n,md,i,j,k;
        char queid[6];
        stu Stu[maxn];
        scanf("%d %d",&n,&md);
        for(i=0;i<n;i++)
        {
                scanf("%s %d %d %d",Stu[i].id,&Stu[i].c,&Stu[i].m,&Stu[i].e);
                Stu[i].average=(Stu[i].c+Stu[i].m+Stu[i].e)/3;
        }

        while(md--)
        {
                scanf("%s\n",queid);

                for(i=0;i<n;i++)
                {
                        if(strcmp(Stu[i].id,queid)==0)
                        {
                                int tmp;int r=1;
                                tmp=Stu[i].average;
                                for(k=0;k<n;k++)
                                        if(Stu[k].average>tmp&&k!=i)
                                                r++;
                                Stu[i].rank=r;
                                Stu[i].rankclass='A';

                                r=1;tmp=Stu[i].c;
                                 for(k=0;k<n;k++)
                                        if(Stu[k].c>tmp&&k!=i)
                                                r++;
                                if(r<Stu[i].rank)
                                        {Stu[i].rank=r;
                                Stu[i].rankclass='C';}

                                r=1;tmp=Stu[i].m;
                                 for(k=0;k<n;k++)
                                        if(Stu[k].m>tmp&&k!=i)
                                                r++;
                                if(r<Stu[i].rank)
                                        {Stu[i].rank=r;
                                Stu[i].rankclass='M';}

                                r=1;tmp=Stu[i].e;
                                 for(k=0;k<n;k++)
                                        if(Stu[k].e>tmp&&k!=i)
                                                r++;
                                if(r<Stu[i].rank)
                                        {Stu[i].rank=r;
                                Stu[i].rankclass='E';}



                                break;
                        }

                }

                if(i==n)
                        printf("N/A\n");
                else
                        printf("%d %c\n",Stu[i].rank,Stu[i].rankclass);

                       // continue;
        }
        return 0;

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值