[编程题]成绩排序(牛客网)题解 原创 2021-3-24 python3 结构体(构造类) 比较器

成绩排序(牛客网):

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种水果的价格。(注意这里水果名就是任意字母组成)

*字典序:按照首字母在字母表中的顺序进行排列。第一个字母相同时,会去比较两个单词的第二个字母在字母表中的顺序,以此类推

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值