题目描述 又是一次期中考。考完之后肯定少不了成绩的排名。可是面对这么多的成绩,老师也觉得累。于是向熟悉编程的你求助。计入排名的考试只有语文数学跟英语三门。按照平均分从高到低输出。 输入要求 先输入一个整数n,表示有n个学生。(0 < n < 300) 接下来n行,每行有4个数据,分别代表学号,语文成绩,数学成绩,英语成绩。 输出要求 按照平均分从大到小输出这n个学生的语文成绩、数学成绩、英语成绩。平均分相同时,按照学号的升序来。
时间: 2024-02-15 19:03:58 浏览: 282
好的,这是一个简单的排序问题。我来帮你解决。
首先,我们可以定义一个结构体来存储学生的信息,包括学号和三门成绩:
```c++
struct Student {
int id; // 学号
double chinese; // 语文成绩
double math; // 数学成绩
double english; // 英语成绩
double average; // 平均分
};
```
然后,我们可以定义一个函数来比较两个学生的平均分,用于排序:
```c++
bool cmp(Student a, Student b) {
if (a.average != b.average) { // 平均分不相等时,按照平均分从大到小排序
return a.average > b.average;
} else { // 平均分相等时,按照学号从小到大排序
return a.id < b.id;
}
}
```
接下来,我们可以读入学生的信息,并且计算每个学生的平均分:
```c++
int n;
cin >> n;
vector<Student> students;
for (int i = 0; i < n; i++) {
int id;
double chinese, math, english;
cin >> id >> chinese >> math >> english;
double average = (chinese + math + english) / 3.0;
students.push_back({id, chinese, math, english, average});
}
```
最后,我们可以使用 sort 函数进行排序,然后输出每个学生的成绩:
```c++
sort(students.begin(), students.end(), cmp);
for (int i = 0; i < n; i++) {
cout << students[i].id << " " << students[i].chinese << " " << students[i].math << " " << students[i].english << endl;
}
```
完整代码如下:
阅读全文