python算法实现——pat_a1025

# 勉强可以通过pat检测
num_of_place = input()
# 用列表存放学生信息
stu_list = [] # 0:编号 1:分数 2:考场号 3:考场排名 4:总排名

for i in range(int(num_of_place)): 
    num_of_stu = input() 
    stu_list_i = [] 
    for j in range(int(num_of_stu)): 
        # 得到准考号和分数
        stu = input().split(' ') 
        # 添加考场号
        stu.append(i+1)
        # 加入列表
        stu_list_i.append(stu)
        # 按分数排名
    stu_list_i.sort(key=lambda x: int(x[1]), reverse=True) # 按分数排名
    # 增加考场排名       
    for k in range(len(stu_list_i)):
        stu_list_i[k].append(k+1)
    # 修改排名
    stu_list.append(stu_list_i[0]) 
    for k in range(1, len(stu_list_i)):
        if(stu_list_i[k][1] == stu_list_i[k-1][1]):
            stu_list_i[k][3] = stu_list_i[k-1][3]
        stu_list.append(stu_list_i[k])     

# 确保相同分数下,准考证号小的排前面,
# python的sorted函数排序是稳定的,所以这里不借助cmp函数的方法而是采取排序两次的方式,
# 具体可以参考官方文档:https://docs.python.org/zh-cn/3.7/howto/sorting.html#sortinghowto
stu_list.sort(key=lambda x: int(x[0]), reverse=False) # 先按准考证号排序
stu_list.sort(key=lambda x: int(x[1]), reverse=True) # 再按总分排序
# 增加总排名
for k in range(len(stu_list)): 
    stu_list[k].append(k+1)

    
# 修改总排名,符合同分同排名,但是占排名位置
for k in range(1, len(stu_list)):
    if(stu_list[k][1] == stu_list[k-1][1]):
        stu_list[k][4] = stu_list[k-1][4]

print(len(stu_list))
for k in range(len(stu_list)): 
    print('{} {} {} {}'.format(stu_list[k][0], stu_list[k][4], stu_list[k][2], stu_list[k][3]))
posted @ 2020-10-18 23:13  叶落未落  阅读(146)  评论(0)    收藏  举报