【题目描述】
从键盘输入一个班学生某门课的成绩(班级人数不超过60人,具体人数由键盘输入),
自定义通用排序函数,该函数既能实现学生成绩升序排序,也能实现学生成绩降序排序。
【输入形式】
第一行,一个正整数n(2≤n≤60),表示学生人数。
接下来n行,每行两个正整数num(1≤num≤100000)和score(0≤n≤100),分别表示学生的学号和某门课的成绩
最后一行,一个正整数c,表示排序方式是按成绩升序还是按成绩降序,c=1表示按成绩升序排序,c=2表示按成绩降序排序。
看看是不是你要的效果哈
#include <iostream>
#include <algorithm>
using namespace std;
struct student {
int num;
int score;
};
bool cmp_asc(const student& a, const student& b) {
return a.score < b.score;
}
bool cmp_desc(const student& a, const student& b) {
return a.score > b.score;
}
void sort_scores(student* s, int n, int c) {
if (c == 1) {
sort(s, s + n, cmp_asc);
} else {
sort(s, s + n, cmp_desc);
}
}
int main() {
int n, c;
cin >> n;
student* s = new student[n];
for (int i = 0; i < n; i++) {
cin >> s[i].num >> s[i].score;
}
cin >> c;
sort_scores(s, n, c);
for (int i = 0; i < n; i++) {
cout << s[i].num << " " << s[i].score << endl;
}
delete[] s;
return 0;
}
代码说明:
struct
来存储每个学生的学号和成绩,使得对于一个学生的信息,可以方便地封装在一个对象里面。cmp_asc()
和 cmp_desc()
分别为升序和降序的比较函数。sort_scores()
是通用排序函数,接受一个学生数组 s
、数组长度 n
和排序方式 c
;如果 c
等于 1 则升序,否则为降序。sort_scores()
排序并输出结果。答案参考ChatGPT Plus版,整理汇总。希望能帮助你解决问题
以下是一个示例的Python代码,用于根据输入的学生人数、学号和成绩,以及排序方式对学生成绩进行升序或降序排序:
def sort_students(students, order):
if order == 1:
return sorted(students, key=lambda x: x[1]) # 按成绩升序排序
elif order == 2:
return sorted(students, key=lambda x: x[1], reverse=True) # 按成绩降序排序
else:
return students
# 输入学生人数
n = int(input())
students = []
# 输入学号和成绩
for _ in range(n):
num, score = map(int, input().split())
students.append((num, score))
# 输入排序方式
c = int(input())
# 调用排序函数进行排序
sorted_students = sort_students(students, c)
# 输出排序结果
for student in sorted_students:
print(student[0], student[1])
在这个示例中,我们定义了一个名为sort_students
的函数,它接受一个学生列表和排序方式作为参数。根据排序方式,我们使用sorted
函数对学生列表进行排序,使用lambda
函数指定按成绩进行排序。如果排序方式是2,则设置reverse=True
以实现降序排序。
然后,我们依次读取学生的学号和成绩,并将它们存储在students
列表中。接下来,我们读取排序方式,并调用sort_students
函数进行排序。最后,我们按顺序打印排序后的学号和成绩。
请注意,这只是一个示例实现,您可以根据需要进行修改和调整。例如,您可以添加输入验证来确保输入的有效性。