深耕专业教研,探索前沿技术
信息技术来源:2026年4月稽阳联谊学校高三联考

第 13 题

答案与解析

第(1)小题

参考答案

8

前5批放置后,第1层的1~7号柜已占用,空柜分成0号和8~9号两段。第5批未能放置,不改变柜子的占用状态。
按编号顺序寻找可容纳2件快递的同层连续空柜:0号只有1个空柜,不满足要求;8~9号恰有2个连续空柜,可全部用于存放,无须再向后偏移。因此,第6批的起始柜子编号为8。

第(2)小题

参考答案
  1. a[i]

  2. p+1

  3. p+a[i]

程序分析

for i in range(len(a)):
    p = getPos(①)
    if p != -1:
        k = (flag[p] - a[i])//2
        ...
    else:
        print('不能放置')

列表a保存各批快递的数量,外层循环按批次处理。getPos返回第一个足够长的同层连续空柜区域的起始编号,找不到时返回−1,程序输出“不能放置”。
找到区域后,flag[p]是该区域的长度。减去本批数量a[i],得到放置后剩余的空柜数;再整除2,得到居中放置时前方保留的空柜数k。若剩余数为奇数,后方会比前方多留1个空柜。

for j in range(k,0,-1):  # 修改居中位置前空快递柜子的flag值
    flag[p] = j
    p = ②

j依次取k、k−1、…、1,flag[p] = j把当前位置开始的连续空柜数改为j。按注释,这段循环处理居中位置前保留的空柜。

for j in range(p,③):  # 修改已存放快递柜子的flag值
    flag[j]=0

flag[j]=0表示第j号柜已被占用。本段从p开始修改记录,右端点由③限定;占用区后方的空柜记录保持不变。

填空分析

①

当前批次编号为i,待存放数量是a[i]。getPos的参数是所需连续空柜数,因此填a[i]。

②

从区域起点开始,每更新一个前方空柜,就应让p向后移动一格,因此②填p+1。循环执行k次后,p增加k,指向本批快递的存放起点;k=0时循环不执行,起点仍为原来的p。

③

此时p为实际存放起点,本批共a[i]件,占用编号p到p+a[i]−1。range不包含右端点,所以终止值填p+a[i]。
注意:原卷注释写flag[9]=0,但按“从该位置开始同层连续空柜数”的定义,初始全空时9号柜自身仍是空柜,故应为1。这里按字段定义理解,三处填空不受该笔误影响。