第 14 题
答案与解析
第(1)小题
B
大巴需要同一行连续 6 个空车位,而不是只要空位总数达到 6 个即可。字符串 110111101000101 中各段连续 0 的长度分别为 1、1、3、1,最长只有 3 个,因此不能停放一辆大巴。
第(2)小题
s[j]=='1' or j==len(s)-1 and s[j]=='0'
c=c%6
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 仍可判断普通车需求是否已满足。
问题反馈
解析有疑问或显示异常?请先复制题目信息,再打开反馈表单填写。
题目编号:2026_03_G3_ningboshixiao_q014
