本题看题目会觉得不知道该怎么下手,分析能把解题步骤想出来,但是代码又会觉得越敲越麻烦
作为考试中压轴的题目,这题确实很麻烦
先将输入的学生信息排序,然后输出最后一排,输出完最后一排剩下的会很好处理
但是将最后一排单拎出来输出又会占去很多行代码
可以先创一个用来输出的列表,因为学生信息已经排序好了,直接往列表里添加数据就行,当列表数据到达一排人数时就输出,然后清空,继续添加下一行(第一行也就是最后一排输出完了后面每排人数都相等了)
因为最高的站中间,然后先右后左(从你的角度是先左后右),所以往输出列表里添加数据时也是先从你的右边开始添加
代码如下,有注释:
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#列表和数数的变量都清空
提交结果:

本文深入探讨了一道考试压轴题的解决思路,通过详细分析和代码实现,讲解了如何对输入的学生信息进行排序,并按照特定规则输出,解决了算法难题。

被折叠的 条评论
为什么被折叠?



