第 13 题
答案与解析
第(1)小题
A
每分钟最多到达1件货品,因此在一个派车周期尚未结束时,可以用“已到达件数+剩余分钟数”求出本周期最终件数的上限。若上限不超过5件,就能提前确定派小车;若已到达件数超过5件,则能提前确定派大车。
到第6分钟,已到达2件,还剩4分钟,最终可能达到6件,也可能不超过5件,尚不能确定车型。到第7分钟,已到达件数仍为2,还剩3分钟,即使后续每分钟都有1件到达,总数也至多为2+3=5件,不会超过k=5。因此可以在第7分钟提前确定派小车,无须等到第10分钟。
第(2)小题
tot = 0
r = m - i - 1
i == m - 1
程序分析
while True:
①
data = []; i = 0
while i < m - 1:
...
if ③:
...
else:
...外层while True反复执行每个m分钟的派车周期。每轮重新建立空列表data,并令i从0开始;内层循环及其后的分支都属于本轮周期。
while i < m - 1:
# 读取货品数据并加入列表data,代码略
tot += data[i]
②
if tot + r <= k or tot > k:
# 根据货品数量提前通知派发车型,代码略
break
i += 1
# 延时1分钟,代码略data[i]是本轮第i+1分钟读到的0或1。tot += data[i]将本次到达件数加入累计量,tot用于记录本周期已到达的货品总数。
判断中的tot > k表示现有货品已经超过阈值,后续数据不会改变派大车的结果;tot+r <= k则要求即使后续每分钟都有货品到达,最终总数也不超过阈值。因此r应表示当前读取完成后剩余的分钟数,也是后续最多还能到达的件数。
任一条件成立,就提前通知车型并执行break;否则才将i加1,继续下一分钟。内层循环只考察前m-1个数据,最后一分钟留给后续分支处理。
if ③:
# 未发送提前通知,读取最后一个数据并派车,代码略
else:
# 已发送提前通知,读取后续货品数据直至派车,代码略两条分支分别处理尚未提前通知和已经提前通知的情况。提前通知只确定车型,并不改变每m分钟派车一次的安排;已经通知时,仍需读取本周期的后续数据,直到派车。
填空分析
①
空①位于外层循环内、开始采集本周期数据之前。tot累计的是当前派车周期的到达件数,因此每个周期开始时都应将其置为0,填写tot = 0。
②
执行到空②时,已经读取并累计了下标0至i的数据,共i+1个。本周期共有m个数据,所以还剩m-(i+1)个待读取,对应剩余m-i-1分钟。填写r = m - i - 1。例如第一次读取后i=0,剩余m-1分钟;读完倒数第二个数据时i=m-2,仍剩最后1分钟。
③
该条件要识别“未发送提前通知”。如果始终未触发break,每轮都会执行i += 1,读完前m-1个数据后i增至m-1,内层循环正常结束。如果提前通知,则break发生在i += 1之前,此时仍满足i < m-1。因此用i == m - 1区分正常结束与提前退出,填写该表达式。m=1时,内层循环不执行,i=0=m-1,也会进入读取最后一个数据并派车的分支。
问题反馈
解析有疑问或显示异常?请先复制题目信息,再打开反馈表单填写。
题目编号:2026_04_G3_wenzhouermo_q013
