b265: Conformity
这篇教学会示范 ZeroJudge 基础题库“b265: Q11286 - Conformity”的解题过程。
题目需求
题目会提供一些空白间隔的数字,这些数字表示“一个学生所选的课程代号”,举例来说“100 101 102 103 488”表示这个学生选了五门课,分别是 100 101 102 103 488,而这五个数字就是“课程组合”,当有许多学生选课时,透过程序选出“最热门”的课程组合以及选择这种课程组合的人数。
解答
这题可以使用“用高效迭代器 itertools”的“groupby”方法,找出一个可迭代对象中“相邻元素”的数量,由于要找“乡邻”的元素,要先将课程代号组合成“字串”( 组合前先排序一次 ),再以字串作为寻找的 key,就能找出每个课程组合的人数。
import itertools # 使用高效迭代器 itertools
while True:
try:
n = int(input()) # 學生人數
if n == 0: break # 如果學生人數等於 0 就跳出
a = [] # 建立空串列,進行課程代號的排序
for i in range(n):
at = input().split() # 將課程組合的代號拆成串列
at.sort() # 從小到大排序
a.append(''.join(at)) # 將代號組合成字串,作為排序依序,存入 a 串列中
a.sort() # a 排序
b = itertools.groupby(a) # 使用 itertools.groupby 方法,取得相鄰元素的數量
c = [] # 建立空串列,記錄最熱門課程的人數
for key, val in b:
c.append(len(list(val))) # c 記錄數量
m = max(c) # 取出最大值,就是最熱門課程的人數
co = c.count(m)
if m == 1:
print(len(a)) # 如果最大值是 1,表示所有課程組合都只有一個人選,印出所有組合的數量
else:
print(m*co) # 反之印出熱門組合的數量
except:
break
微信扫码关注
抖音扫码关注