成绩排序(牛客网):
https://www.nowcoder.com/questionTerminal/0383714a1bb749499050d2e0610418b1
题目:
语法:python3
思路:
1、用结构体构造一个User类
2、写2个比较器:升序、降序
3、读取每个User的name和score,把每个User作为元素放进数组
4、排序、打印
from functools import cmp_to_key
# 构造User类
class User():
# 构造函数
def __init__(self, name, score):
self.name = name
self.score = score
# 降序比较器
def cmp1(user1, user2):
return user2.score - user1.score
# 升序比较器
def cmp2(user1, user2):
return user1.score - user2.score
while True:
try:
n = int(input()) # User数量
flag = input() # 0-降序,1-升序
users = [User("zhu", -1)] * n # 数组存每个User
for i in range(n):
line = input()
name,score = line.split()
users[i] = User(name, int(score)) # 实例化类
# 降序
if flag == "0":
res = sorted(users, key=cmp_to_key(cmp1))
# 升序
if flag == "1":
res = sorted(users, key=cmp_to_key(cmp2))
for i in range(n):
print(res[i].name + " " + str(res[i].score))
except:
break
该问题涉及知识点:排序、比较器
相似题目:
问题1、员工排序:按照评分、工作年限、婚姻状况、名字(字典序)
对于工资表结构如下(员工编号,姓名,部门,工资),要对查询的结果按照部门升序与工资降序进行排序
问题2、水果排序
https://www.nowcoder.com/questionTerminal/c41431345010475b8ae0bef30e420380
输入任意(水果ID,水果名,价格)序列,例如:1 apple 10,需要对这些序列进行排序,排序规则如下:
如果水果的价格不同就按照从小到大排序,如果水果的价格相同就按照水果名的字典序从小到大排列。
排序好后,购买前k种水果,并输出购买前k种水果的价格。(注意这里水果名就是任意字母组成)
*字典序:按照首字母在字母表中的顺序进行排列。第一个字母相同时,会去比较两个单词的第二个字母在字母表中的顺序,以此类推