某校为学生期末考试分配考场,并编制准考证号。每个班级有班号,每位学生有班内序号,班内序号是按班级现有人数从1开始逐个编排的。准考证号格式为“入学年份+班号+班内序号”。每个考场有30个座位,座位号从1开始,连续分配座位的两个学生不属于同一个班级。分配方法是:按考场号递增、同一考场座位号递增的顺序逐一分配座位。每次分配,先选班级,再选学生。选择班级时,在班级降序序列(按未分配人数)中选择第1个班级,但如果该班和前一次分配选定的班级相同,则改选第2个班级。选定班级后,再为该班未分配学生中序号最大的学生分配考场座位,并维护班级降序序列(按未分配人数)。 编写python程序,实现考场分配功能:程序运行界面如图所示。回答下列问题: 班级人数初始状态: 01班 40人 02班 39人 04班 39人 03班 37人 05班 34人 06班 33人 07班 33人 08班 31人 09班 31人 (1)完成代码填空 (2)加框处代码有错,请改正
def fm(k):
return ('0'+str(k))[-2:]
# 班级信息 每项为[班号,班内人数] 按人数降序
bj = [[1,40],[2,39],[4,39],[3,37],[5,34],[6,33],[7,33],[8,31],[9,31]]
n = len(bj)
print("班级人数初始状态: ")
for i in range(n):
print("%s班 %s人" % (fm(bj[i][0]),fm(bj[i][1])))
y = input('请输入年份: ')
st=[];room=1;seat=1;choice=-1
___________ #(1)
while f==True:
if bj[0][0]!=choice:
m=0
else:
m=1
choice = bj[m][0]
st.append([y+fm(bj[m][0])+fm(bj[m][1]), fm(room), fm(seat)])
seat += 1
if seat > 30:
room = 1 #改错 __________
seat = 1
bj[m][1] -= 1
# 维护班级降序序列(按未分配人数)
for i in range(_______,n-1): #(2)
if bj[i][1] < bj[i+1][1]:
bj[i],bj[i+1] = bj[i+1],bj[i]
else:
break
if _____________:
f = False
for t in st:
print(t)
9.(2021.1 T15)根据QA、QB值挑选2个人组队
根据申请人的QA和QB值,从m个申请人中挑选2人组队参加某挑战赛。 条件一是2人的QA值都必须大于指定参数h; 条件二是2人的QA值之差(较大值减较小值)小于h。 在满足上述两个条件的所有2人组合中,挑选QB值之和最大的一个组合。 (QA、QB和h的值均为正整数) 编写python程序,实现上述挑选功能。请回答下列问题: 图片: https://uploader.shimo.im/f/mM6tBTDPcckDF0lR.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE3NjcyNjU2MjIsImZpbGVHVUlEIjoicnAzT01qSmdPQlU5V1drbSIsImlhdCI6MTc2NzI2NTMyMiwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwicGFhIjoiYWxsOmFsbDoiLCJ1c2VySWQiOjI1NzY4OTUwfQ.-ZRTybbg-wvOpIwtI5Iscu25hptZuCwz41fTxR7THoI (1)实现上述功能的python程序如下,请在划线处填入合适的代码。 (2)程序中加框处代码有错,请改正。
a =[[6,175,15],[1,138,26],[11,96,41],[2,78,38],[4,76,30], [20,53,27],[7,46,31], [13,38,29]]
h = int(input())
n = m = len(a)
for i in range(m-1):
k = i
for j in range(i+1,m):
if a[j][1] > a[k][1]: k=j
if a[i][1]>h: #改错________________
if k!= i:
a[i],a[k] = a[k],a[i]
else:
_________
break
print("满足条件一的共%s 人,分别为:"% n)
print(a[:n])
max =0;s="没有满足条件的组合"
#在满足条件的组合中,寻找QB值之和最大的组合,若有并列,只保留第一个
for i in range(n-1,0,-1):
j = i-1
while____________:
if a[i][2] + a[j][2]> max:
s = "组对结果:%s, %s号"%(a[i][0], a[j][0])
_______________
j -= 1
print(s)
—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com