题目描述 又到一年一度的期末考试了,老师最头痛的问题就是从一堆学生中找最高分和最低分,你快来帮忙吧。 输入 测试数据有多组,每组首先是一个正整数n(0 < n < 31),接下来是n行数据,每行数据代表一个学生的成绩,分部为学生的姓名、学号、成绩。其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。 输出 每组分两行输出成绩最高和成绩最低学生的姓名、学号和成绩,字符串间有1空格,两组之间用空行隔开。用c/c++实现
时间: 2024-01-03 19:04:53 浏览: 70
好的,下面是一个用 C++ 实现的程序,可以解决这个问题。同样地,它假定您已经将所有测试数据都存储在一个文本文件中,每个测试用例由一个或多个空行分隔。
```cpp
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
struct Student {
string name;
string id;
int score;
};
bool compare(Student s1, Student s2) {
return s1.score < s2.score;
}
int main() {
int n;
while (scanf("%d", &n) != EOF) {
vector<Student> students;
for (int i = 0; i < n; i++) {
string name, id;
int score;
cin >> name >> id >> score;
students.push_back({name, id, score});
}
sort(students.begin(), students.end(), compare);
cout << students.back().name << " " << students.back().id << " " << students.back().score << endl;
cout << students.front().name << " " << students.front().id << " " << students.front().score << endl;
cout << endl;
}
return 0;
}
```
以上程序使用了 C++ 的 STL(Standard Template Library)中的容器和算法。对于每个测试用例,它会将所有学生的信息读入一个 vector 中,然后使用 `std::sort` 函数将学生按照成绩从小到大排序。最后,它会输出最高分和最低分的学生的姓名、学号和成绩,然后输出一个空行以便与下一个测试用例分隔开来。
阅读全文