火龙信奥
  • 首页
  • 课程
  • 题库
  • 打卡
    • 代码对战
    • 快速对战
  • 题单
  • 团队
  • 荣誉墙
  • 商城
  • 登录 / 注册

考场排座

作者: 作者的头像   huolong , 时间:2026-01-01 18:27:50 , 所有人可见, 阅读  21

某校为学生期末考试分配考场,并编制准考证号。每个班级有班号,每位学生有班内序号,班内序号是按班级现有人数从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

©2026加盟我们 | 关于我们 | ACM课程 | 常见问题 | 成果墙 | 评测记录 | 浙ICP备2021013995号
在线画图 | OI WIki | 打字练习
火龙信奥
请输入登录信息


请完成安全验证
验证码底图 滑块
向右拖动滑块完成验证
请输入用户名 / 绑定的手机号码



请输入注册信息(手机号验证码注册)





验证码5分钟有效,60秒内不可重复获取,每日最多3次

微信登录

微信登录二维码

正在生成二维码...

账号已过期,请续期。
去续期

绑定手机号

📱

为了更好地保护您的账号安全,享受完整的平台服务

请您尽快绑定手机号码