1 条题解

  • 0
    @ 2026-3-4 14:16:35

    文字教学

    这道题是简单的模拟题,按步骤处理即可:

    1. 用结构体存储每个学生的姓名、成绩、身份信息和奖金。
    2. 对每个学生,依次检查5项奖学金的条件,符合就累加对应奖金。
    3. 遍历过程中记录奖金最高的学生(若并列取第一个),并累加所有学生的总奖金。
    4. 按要求输出结果。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    struct S {
        char nm[25];
        int s1, s2, p, m;
        char g, w;
    } s[105];
    
    int main() {
        int n, mx = 0, sum = 0, idx = 0;
        cin >> n;
        for (int i = 0; i < n; ++i) {
            cin >> s[i].nm >> s[i].s1 >> s[i].s2 >> s[i].g >> s[i].w >> s[i].p;
            s[i].m = 0;
            if (s[i].s1 > 80 && s[i].p >= 1) s[i].m += 8000;
            if (s[i].s1 > 85 && s[i].s2 > 80) s[i].m += 4000;
            if (s[i].s1 > 90) s[i].m += 2000;
            if (s[i].s1 > 85 && s[i].w == 'Y') s[i].m += 1000;
            if (s[i].s2 > 80 && s[i].g == 'Y') s[i].m += 850;
            sum += s[i].m;
            if (s[i].m > mx) {
                mx = s[i].m;
                idx = i;
            }
        }
        cout << s[idx].nm << endl << mx << endl << sum << endl;
        return 0;
    }
    
    • 1

    [NOIP 2005 提高组] 谁拿了最多奖学金

    信息

    ID
    51
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    3
    已通过
    3
    上传者