求助(有注释版)

P1093 [NOIP2007 普及组] 奖学金

Retribution321 @ 2024-11-22 16:07:51


#include<bits/stdc++.h>
using namespace std;
#define pzq(a,b,c) for(int a=b;a<c;a++)
#define qzp(a,b,c) for(int a=b;a>=c;a--)

struct chengji{
        int chinese,math,english;
    };
int main(){
    int n;
    cin>>n;
    chengji a[n+1];int score[n+1];
    pzq(i,1,n+1){
        cin>>a[i].chinese>>a[i].math>>a[i].english;
        score[i]=a[i].chinese+a[i].math+a[i].english;//输入数据,统计总分 
    }
    int num=0,ans=0;//用于储存最高分和对应号码 
    pzq(i,1,6){//循环输出5次 
        pzq(j,1,n+1){//每个成绩和最高分比较,高于最高分则替换为最高分 
            if(score[j]>ans)ans=score[j];num=j;continue;
            if(score[j]==ans){//总分相同时,比较语文成绩 
                if(a[num].chinese>=a[j].chinese)continue;//由于由编号小到编号大比较,因此同分时无需操作 
                if(a[num].chinese<a[j].chinese)num=j;continue;//将语文成绩高的编号记为最高分的编号 
            }
            else continue;
        }
        cout<<num<<" "<<ans<<endl;//输出最高分和编号 
        score[num]=0;
        num=0;ans=0;//将本次最高分变为0分,去重 
    }
    return 0;
}

by Retribution321 @ 2024-11-22 16:09:03

第一名没问题,第二名往后都是是最高分-1,编号不变,如:
6 265
6 264
6 264
6 264
6 264


|