洛谷P1051 谁拿了最多奖学金

https://www.luogu.org/problem/P1051

#include<bits/stdc++.h>
using namespace std;
struct node {
    string xm;//姓名
    int qm,bj;//期末平均成绩,班级评议成绩
    char bgb,xb;//是否是学生干部,是否是西部省份学生
    int lw;//发表的论文数
    int ans;//个人所获的奖金数
    int num;//序号数,因为题目要求两个人所获的奖金数相同时,输出先出现的,即序号较靠前的(较小的)
} a[101];
int n,tot=0;//tot记录总的钱的数目 
bool cmp(node x,node y) {
    if(x.ans==y.ans)return x.num<y.num;// 奖学金数从大到小排序
    else return x.ans>y.ans;//奖金相同时按序号数从小到大排序
}
int main() {
    scanf("%d",&n);
    for(int i=1; i<=n; i++) {
        cin>>a[i].xm>>a[i].qm>>a[i].bj>>a[i].bgb>>a[i].xb>>a[i].lw;
        if(a[i].qm>80&&a[i].lw>=1)
            a[i].ans+=8000;
        if(a[i].qm>85&&a[i].bj>80)
            a[i].ans+=4000;
        if(a[i].qm>90)
            a[i].ans+=2000;
        if(a[i].xb=='Y'&&a[i].qm>85)
            a[i].ans+=1000;
        if(a[i].bj>80&&a[i].bgb=='Y')
            a[i].ans+=850;
        a[i].num=i;
        tot+=a[i].ans;//tot为总的奖学金数
    }
    sort(a+1,a+n+1,cmp);
    cout<<a[1].xm<<endl<<a[1].ans<<endl<<tot;
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main() {
    int n,score1,score2,sum=0,max=0,total=0,x,i;
    char a,b;
    string name,maxn;
    cin>>n;
    for(i=1; i<=n; i++) {
        cin>>name>>score1>>score2>>a>>b>>x;
        if(score1>80 && x>0)//判断是否获得院士奖学金
            sum+=8000;
        if(score1>85 && score2>80)//判断是否获得五四奖学金
            sum+=4000;
        if(score1>90)//判断是否获得成绩优秀奖
            sum+=2000;
        if(score1>85 && b=='Y')//判断是否获得西部奖学金
            sum+=1000;
        if(score2>80 && a=='Y')//判断是否获得班级贡献奖
            sum+=850;
        total+=sum;//累加奖学金
        if(sum>max)//找出最牛学生
            maxn=name,max=sum;//sum的用处
        sum=0;
    }
    cout<<maxn<<endl<<max<<endl<<total;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/QingyuYYYYY/p/11715615.html