解决思路
- 定义结构体:定义一个结构体 Student 来存储每个学生的信息和奖金总数。
- 读取输入:读取每个学生的信息,并计算每个学生的奖金总数。
3. 排序:根据奖金总数对学生进行排序,如果奖金总数相同,则按输入顺
序排序。
- 输出结果:输出获得最多奖金的学生的姓名、奖金总数,以及所有学生获得的奖学金总数。
#include <bits/stdc++.h>
using namespace std;
// 定义一个结构体来存储每个学生的信息和奖金总数
struct Student {
string name;
int qm; // 期末平均成绩
int bj; // 班级评议成绩
char ganbu; // 是否是学生干部
char xibu; // 是否是西部省份学生
int lunwen; // 发表的论文数
int id; // 学生的输入顺序
int sum = 0; // 奖金总数
};
// 比较函数,用于按照奖金总数对学生进行排序
bool cmp(Student a, Student b) {
if (a.sum == b.sum) {
return a.id < b.id;
}
return a.sum > b.sum;
}
Student a[10005];
int main() {
int n;
cin >> n;
int totalSum = 0; // 所有学生获得的奖学金总数
// 读取每个学生的信息,并计算每个学生的奖金总数
for (int i = 0; i < n; i++) {
cin >> a[i].name >> a[i].qm >> a[i].bj >> a[i].ganbu >> a[i].xibu >> a[i].lunwen;
a[i].id = i;
if (a[i].qm > 80 && a[i].lunwen >= 1) {
a[i].sum += 8000;
}
if (a[i].qm > 85 && a[i].bj > 80) {
a[i].sum += 4000;
}
if (a[i].qm > 90) {
a[i].sum += 2000;
}
if (a[i].qm > 85 && a[i].xibu == 'Y') {
a[i].sum += 1000;
}
if (a[i].bj > 80 && a[i].ganbu == 'Y') {
a[i].sum += 850;
}
totalSum += a[i].sum;
}
// 按照奖金总数对学生进行排序
sort(a, a + n, cmp);
// 输出获得最多奖金的学生的姓名、奖金总数,以及所有学生获得的奖学金总数
cout << a[0].name << endl << a[0].sum << endl << totalSum << endl;
return 0;
}
解决思路
- 定义结构体:定义一个结构体 Student 来存储每个学生的信息和奖金总数。
- 读取输入:读取每个学生的信息,并计算每个学生的奖金总数。
3. 排序:根据奖金总数对学生进行排序,如果奖金总数相同,则按输入顺
序排序。
- 输出结果:输出获得最多奖金的学生的姓名、奖金总数,以及所有学生获得的奖学金总数。