3805 谁拿了最多的奖学金 好多好多的条件

喜欢这么多条件判断的程序嘛?^^

#include<bits/stdc++.h>
#define f(i,s,e) for(int i = s; i <= e; i++)
#define ll long long
using namespace std;
const int N = 1e3+10,inf = 0x3f3f3f3f;
struct node{
    string name,gb,xb; //名字、干部、西部学生
    int qm,py,lw; //期末、评议、论文 
    int money; //总奖学金 
    int id;
};
node a[N];
int n;
bool cmp(node a,node b)
{
    if(a.money == b.money) return a.id < b.id;//**********
    else return a.money > b.money;
}
int main()
{
    cin >> n;
    int ans = 0;
    for(int i = 1; i <= n; i++)
    {
        cin >> a[i].name >> a[i].qm >> a[i].py >> a[i].gb >> a[i].xb >> a[i].lw;
        int sum = 0; //用来算得了多少钱
        if(a[i].qm > 80 && a[i].lw >= 1) sum += 8000; //院士奖学金
        if(a[i].qm > 85 && a[i].py > 80) sum += 4000; //五四奖学金
        if(a[i].qm > 90) sum += 2000; //成绩优秀奖 
        if(a[i].qm > 85 && a[i].xb == "Y") sum += 1000; //西部奖学金
        if(a[i].py > 80 && a[i].gb == "Y") sum += 850; //班级贡献奖 
        ans += sum; //记录累加的总钱数 
        a[i].money = sum; //记录每名学生的钱
        a[i].id = i; //记录这是第i位学生 ******
    }
    sort(a + 1, a + 1 + n, cmp);
    cout << a[1].name << endl;
    cout << a[1].money << endl;
    cout << ans << endl;
    return 0;
}

 

posted @ 2024-06-28 17:33  CRt0729  阅读(12)  评论(0编辑  收藏  举报