先输入一个整数n,表示有n个学生。(0 < n < 300)接下来n行,每行有4个数据,分别代表学号,语文成绩,数学成绩,英语成绩。按照平均分从大到小输出这n个学生的语文成绩、数学成绩、英语成绩。平均分相同时,按照学号的升序来。
时间: 2023-11-04 21:09:10 浏览: 127
好的,这是一个简单的排序问题。可以使用结构体来存储学生信息,然后按照要求进行排序输出。
以下是示例代码实现:
```C++
#include <iostream>
#include <algorithm>
using namespace std;
struct Student {
int id, chinese, math, english;
double average; // 平均分
};
bool cmp(Student a, Student b) {
if (a.average != b.average) {
return a.average > b.average; // 按照平均分从大到小排序
} else if (a.chinese != b.chinese) {
return a.chinese > b.chinese; // 平均分相同时,按照语文成绩从大到小排序
} else {
return a.id < b.id; // 平均分和语文成绩都相同时,按照学号从小到大排序
}
}
int main() {
int n;
cin >> n;
Student stu[n];
for (int i = 0; i < n; i++) {
cin >> stu[i].id >> stu[i].chinese >> stu[i].math >> stu[i].english;
stu[i].average = (stu[i].chinese + stu[i].math + stu[i].english) / 3.0; // 计算平均分
}
sort(stu, stu + n, cmp); // 排序
for (int i = 0; i < n; i++) {
cout << stu[i].chinese << " " << stu[i].math << " " << stu[i].english << endl;
}
return 0;
}
```
在输入示例中,假设有三个学生,他们的信息如下:
```
3
1001 90 80 70
1002 80 85 75
1003 95 90 85
```
程序运行后,输出结果如下:
```
95 90 85
90 80 70
80 85 75
```
这是按照平均分从大到小排序,平均分相同时按照语文成绩从大到小排序,最后按照学号从小到大排序得到的结果。
阅读全文