第 13 题
答案与解析
第(1)小题
2
序列中的连续错误段为开头的0,0,0和末尾的0,0,0,0,中间被正确状态1隔开。两段的长度分别为3和4,均达到连续3次错误的条件,各计1次故障,共2次。
第(2)小题
count = 0
flag == False and a[i] == 0
k = end - start + 1
程序分析
n = len(a) # 数组a中存放了某传感器24小时的验证数据
start = end = 0; i = 0
①
flag = False
while i < n:
if ②:
flag = True; start = i
elif a[i] == 0:
end = i
elif flag == True and a[i] == 1:
③
if k >= 3:
count = count + 1
flag = False
i = i + 1i从0开始,每轮增加1,依次处理数组中的验证数据。第一个分支执行时,将flag设为True,并把当前下标保存到start;若进入后面的a[i]==0分支,则把当前下标保存到end。
当flag为True且当前数据为1时,程序进入第三个分支,判断k是否达到3,满足时将count增加1,然后把flag恢复为False。结合题意,这里是在一段连续错误结束时判断是否计为故障,因此count记录累计故障次数,flag用于标记是否正在处理连续错误段。
连续错误段开始时需要记录start;同段后续的0由end记录其下标。对于长度至少为2的错误段,start、end分别对应这一段首尾两个0的位置。
if flag == True and end - start + 1 >= 3:
count = count + 1
if count > 5:
print("该线路需要检修!")如果数组以0结束,最后一段不会遇到1,循环内的第三个分支便没有机会统计它。循环后的判断用flag检查是否还有未结束的错误段,并在长度达到3时补计一次。最后只有count>5才输出检修提示,累计恰好5次时不预警。
填空分析
①
后文每发现一处故障就执行count=count+1,因此count是故障计数器。遍历开始前尚未统计任何故障,应初始化为0,填写:
count = 0
②
该分支执行flag=True和start=i,应在一段连续错误的第一个0处进入。此时尚未处于错误段,flag为False,且当前数据a[i]为0,两个条件需同时满足,填写:
flag == False and a[i] == 0
进入错误段后flag为True,同段后续的0转入下一分支更新end,保留原来的起点start。
③
当前位置已遇到1,接下来用k>=3判断刚结束的错误段是否构成故障。错误段首尾下标都计入长度,因此由start到end共有end-start+1个元素,填写:
k = end - start + 1
若某段只有一个0,end尚未更新到这一段,仍不大于start,计算结果至多为1,不会误计为故障;长度至少为2时,end已更新为本段末尾下标,上式得到实际长度。
问题反馈
解析有疑问或显示异常?请先复制题目信息,再打开反馈表单填写。
题目编号:2026_05_G3_zhujimoni_q013
