信息科学技术学院年终评定讲学金,需要对整个年级的学生按照平均分数进行排名. 要求:根据输入的学号和平均成绩,按照平均成绩降序输出学号. 如果平均成绩相同,按照输入的顺序输出。输入的平均成绩是整数。 【输入形式】 第一行为N,表示输入N位学生的信息,接着的N行输入学生信息,1<=N<=500 学生信息的格式为:学号 平均成绩 学号的长度小于10,平均成绩在1-100之间. 【输出形式】 按照平均成绩降序输出学号,如果平均成绩相同,按照输入顺序输出
时间: 2024-03-16 08:44:09 浏览: 132
好的,我理解了你的问题。这是一个排序问题,需要先按照平均成绩进行降序排序,如果平均成绩相同,再按照输入顺序排序。以下是可能的解法,供你参考:
```python
n = int(input())
students = []
for i in range(n):
id, score = input().split()
students.append((id, int(score), i)) # i 用于记录输入顺序
students.sort(key=lambda x: (-x[1], x[2])) # 按照平均成绩降序排序,如果平均成绩相同,按照输入顺序排序
for student in students:
print(student[0])
```
解释一下代码:
首先读入学生信息,将每个学生表示为一个元组 `(id, score, i)`,其中 `id` 是学号,`score` 是平均成绩,`i` 是输入顺序。
然后使用 `sort` 函数对学生进行排序。排序的关键是一个 lambda 函数,它返回一个元组 `(-x[1], x[2])`,表示先按照平均成绩降序排序(注意负号表示降序),如果平均成绩相同,再按照输入顺序排序。
最后按照顺序输出每个学生的学号即可。
注意:这个解法使用了 Python 中的一些高级特性,可能不太容易理解。如果你不熟悉 lambda 函数和元组比较大小的规则,建议先学习一下。
阅读全文