第 14 题
答案与解析
第(1)小题
B
每组数据对应同一分钟的两个传感器读数,用差的绝对值判断是否超过40。异常要求连续至少3分钟超限,不能把不连续的超限分钟数相加。
| 数据序号 | 差的绝对值 | 是否超过40 | 截至当前连续超限分钟数 |
|---|---|---|---|
| 1 | 48 | 是 | 1 |
| 2 | 32 | 否 | 0 |
| 3 | 96 | 是 | 1 |
| 4 | 46 | 是 | 2 |
| 5 | 27 | 否 | 0 |
两段连续超限分别持续1分钟和2分钟,均未达到3分钟,因此不存在数据采集异常。
第(2)小题
abs(d[0]-d[1])>M
cnt+=1
flag=False
程序分析
res=[];flag=False
i=0
while i<len(data):
d=data[i]
if ①:
if flag:
②
if cnt>=N:
# 根据i值计算时间节点并存入列表res,代码略
else:
cnt=1
flag=True
else:
③
i+=1i从0开始,每轮取出data[i],处理后增加1,因此程序按时间顺序逐分钟检查。d[0]和d[1]分别是两个光线传感器在同一分钟采集的读数,res用于保存符合异常条件的时间节点。
flag初值为False。进入外层if后,flag为False时执行cnt=1、flag=True;flag为True时,经过空②后将cnt与N比较,达到要求就记录当前时间节点。结合题目要求,cnt需要记录截至当前连续超限的分钟数,flag需要区分本分钟是连续段的开始还是延续;三处空缺共同维持这一状态。
填空分析
①
题目要求同一分钟的两读数之差超过M。两读数的大小关系不固定,应取差的绝对值;“超过”对应严格大于,填写:
abs(d[0]-d[1])>M
差值等于M时进入外层else,不计入连续超限段。
②
当前分钟已经超限,且flag为True,需在此前的连续超限分钟数上增加1,再由cnt>=N判断是否记录当前节点,填写:
cnt+=1
例如N=3时,新段首分钟令cnt=1,第二、三分钟分别增加到2、3,从第三分钟起记录;随后每连续超限一分钟,都记录相应节点。
③
当前分钟未超限,连续段中断。将flag恢复为False,可使下一次超限时进入cnt=1的分支,重新计数,填写:
flag=False
下一段开始时cnt=1会覆盖旧计数,因此此处无需另设cnt=0。
原程序未限制N必须大于1,但新连续段的首分钟只执行cnt=1和flag=True,没有检查cnt>=N。若N=1,该分钟已经满足异常条件,却不会被记录。例如只有一条超限记录时,res仍为空。这是原固定代码的边界缺陷,上述三处填空不能消除。
问题反馈
解析有疑问或显示异常?请先复制题目信息,再打开反馈表单填写。
题目编号:2026_04_G3_huquli_q014
