又双叒叕来求助了,换了个思路(有注释,求大佬debug)

P1093 [NOIP2007 普及组] 奖学金

Retribution321 @ 2024-11-22 16:53:09


#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;
    };
bool cmp(int a,int b){
    return a>b;
}
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;//输入数据,统计总分 
    }
    sort(score+1,score+n+1,cmp);//将成绩由高到低排序 
    int num=0;
    pzq(i,1,6){//输出五次 
        pzq(j,1,n+1){
            if(score[i]=a[j].chinese+a[j].math+a[j].english){//从最高分开始寻找对应分数的人 
                if(num!=0){//判断前面是否已有同分的人被选中 
                    if(a[j].chinese>a[num].chinese)num=j;continue;//如果挑战者的语文分数大于擂主,则成为擂主
                    if(a[j].chinese<=a[num].chinese)continue;//挑战失败则跳过 
                }
                else num=j;continue;//若前面没有重分者,则自己成为擂主 
            }
            else continue;
        }
        cout<<num<<" "<<score[i]<<endl;
        a[num].chinese=0;a[num].math=0;a[num].english=0;
        num=0;//重置编号并去重 
    }
    return 0;
}

|