用python来解PAT乙级1055集体照-25-满分(代码简洁注释全)

tech2025-01-30  15

本题看题目会觉得不知道该怎么下手,分析能把解题步骤想出来,但是代码又会觉得越敲越麻烦

作为考试中压轴的题目,这题确实很麻烦

先将输入的学生信息排序,然后输出最后一排,输出完最后一排剩下的会很好处理

但是将最后一排单拎出来输出又会占去很多行代码

可以先创一个用来输出的列表,因为学生信息已经排序好了,直接往列表里添加数据就行,当列表数据到达一排人数时就输出,然后清空,继续添加下一行(第一行也就是最后一排输出完了后面每排人数都相等了)

因为最高的站中间,然后先右后左(从你的角度是先左后右),所以往输出列表里添加数据时也是先从你的右边开始添加

代码如下,有注释:

n ,k = map(int,input().split())#人数,排数 stu = []#创建列表 for i in range(n): stu.append(input().split())#学生信息姓名+身高放入列表 #按姓名正序 stu = sorted(stu,key = lambda stu: stu[0]) #再按身高倒序 stu = sorted(stu,key = lambda stu: int(stu[1]), reverse=True) num = n// k#前排人数 final = n// k+n% k#最后一排人数 total = 0#变量,用来数数,每到一排就输出 res = [] for i in range(n): #右边比左边高,先右边开始 if total%2 == 0:#偶数的话,就从右边开始追加 res.append(stu[i][0]) else:#奇数,从左边加 res.insert(0, stu[i][0]) total +=1 #达到最后一排人数,输出 if total == final: print(' '.join(res)) # 除了最后一行外,其余各行人数相等 final = num res = [] total = 0#列表和数数的变量都清空

提交结果:

最新回复(0)