深耕专业教研,探索前沿技术
信息技术来源:宁波“十校”2026届高三3月联考技术试题卷

第 14 题

答案与解析

第(1)小题

参考答案

B

大巴需要同一行连续 6 个空车位,而不是只要空位总数达到 6 个即可。字符串 110111101000101 中各段连续 0 的长度分别为 1、1、3、1,最长只有 3 个,因此不能停放一辆大巴。

第(2)小题

参考答案
  1. s[j]=='1' or j==len(s)-1 and s[j]=='0'

  2. c=c%6

  3. m=m-c

程序分析

i=0
while i<len(d):
    c=0;s=d[i]
    for j in range(len(s)):
        ...
    if n<=0 and m<=0:
        break
    i=i+1

外层循环逐行读取停车数据,s 表示当前行,内层循环用 j 扫描该行的车位。题干给出的 n、m 是需要停放的大巴数和普通车数;程序在每行处理结束后检查这两个数量是否均不大于 0,以决定是否提前结束扫描。

for j in range(len(s)):
    c=c+1-int(s[j])
    if ①:
        if n>=c//6:
            n=n-c//6
            ②
        else:
            n=0
            c=c-n*6
        ③
        c=0

遇到 0 时,1-int(s[j]) 等于 1,c 增加 1;遇到 1 时加 0。c 在 if① 分支末尾清零,因此该分支需要在一段连续空位统计结束后处理这一段。每辆大巴占连续 6 个车位,长度为 c 的空位段最多容纳 c//6 辆大巴;n=n-c//6 相应减少待停大巴数。

原题 else 分支存在固定语句顺序错误:先执行 n=0,会使随后 c=c-n6 不再扣除大巴占用的车位。例如一段 13 个空位停入 1 辆大巴后只能再停 7 辆普通车,原程序却会判定还能停 8 辆。要使该分支符合题意,需要先扣除 n6 个车位,再将 n 置零。下面三个空按各自应完成的功能作答,代码摘录保留原题写法。

if i<len(d):
    print("可以停放!")
else:
    print("不可以停放!")

若循环因 n≤0 且 m≤0 而提前结束,i 仍小于 len(d),程序输出“可以停放!”;若扫描完全部行才退出,i 等于 len(d),输出“不可以停放!”。

填空分析

①

每段连续空位必须在遇到已占车位时结算;若该段一直延伸到行末,还要在最后一个 0 处结算。因此填 s[j]=='1' or j==len(s)-1 and s[j]=='0'。and 的优先级高于 or,表示“遇到 1,或者到达行末且该位置为 0”。最后一个字符为 0 时,它已在上一句中计入 c。

②

此分支满足 n≥c//6,上一句已从 n 中扣除了本段安排的 c//6 辆大巴。它们占用 6×(c//6) 个车位,剩余车位数为 c-6×(c//6),也就是 c%6,所以填 c=c%6。

③

安排大巴后,c 应表示本段可供普通车使用的剩余空位。每个空位可停 1 辆普通车,故待停普通车数应减少 c,填写 m=m-c。m 为负数表示空位有富余,后面的 m≤0 仍可判断普通车需求是否已满足。