深耕专业教研,探索前沿技术
信息技术来源:浙江强基联盟2026年5月高三联考

第 14 题

答案与解析

第(1)小题

参考答案

3

每个小时的人流量都必须在[15,35]内,同时整个连续时段的最高温度与最低温度之差不能超过5℃,不能只比较相邻两小时的温差。

8:00—9:00的人流量为12,13:00—14:00的人流量为40,均不符合要求,连续活动时段不能跨过这两段。因此,只需在9:00—13:00和14:00—17:00这两段中选择。

9:00—13:00共4小时,温度依次为22、25、27、28℃,温差为28−22=6℃,不能全部选取;其中9:00—12:00的温差为27−22=5℃,10:00—13:00的温差为28−25=3℃,均可连续举办3小时。14:00—17:00共3小时,温差为24−21=3℃,也符合要求。

前一段不能取满4小时,后一段本身只有3小时,且确实存在符合条件的3小时时段,所以最长为3小时。

第(2)小题

参考答案
  1. j=i

  2. j+=1

程序分析

T = 5; L = 15; R = 35
mlen = 0; n = len(data)
for i in range(n):
    p = data[i][0]
    if L <= p <= R:
        ①
        temps = []
        while j < n:
            ...
        mlen = max(mlen, j - i)
print(mlen)

data 中每个元素保存一个小时段的人流量和温度,T 是允许的最大温差,L、R 是人流量的下限和上限。外层循环用 i 逐一尝试起点;p 取当前起点的人流量,只有起点人流量合格时才进入内层检查。每次更换起点,都重新建立空列表 temps,避免混入前一起点对应的温度。mlen 初值为0,内层结束后再与 j−i 比较更新,最终输出保留下来的最大长度。

while j < n:
    flow, temp = data[j]
    if L <= flow <= R:
        break
    temps.append(temp)
    if max(temps) - min(temps) > T:
        break
    ②

j 用于访问当前待检查的小时段,flow、temp 分别取得其人流量和温度。程序先判断人流量,再把当前温度追加到 temps,随后用 max(temps)−min(temps) 检查已收集温度的总体跨度。跨度超过 T 就退出,因为继续追加数据只可能使最大值不减、最小值不增,温差不能重新缩小到允许范围。两个 break 都位于空②之前,退出时是否计入当前时段,要结合 j 的更新方式判断。加框处是第(3)问指定的错误条件;这里保留原写法,第(2)问补全与第(3)问改错需共同完成,才能实现题目要求。

填空分析

①

外层循环正在尝试以第 i 个小时段为起点,内层通过 data[j] 取出待检查的小时段。第一次应检查起点本身,因此在进入 while 前令 j=i。temps 初始为空,起点温度也要在循环中加入,不能从 i+1 开始而漏掉起点。

②

空②位于人流量判断和温差判断之后。配合第(3)问修正退出条件后,能够执行到这里,说明第 j 个小时段加入后仍满足全部要求,应令 j+=1,继续检查下一小时段。

这样,i 到 j−1 是已经通过检查的时段:如果某一时段不合格,程序会在 j 增加前退出,因此 j−i 不计入该时段;即使温差超限时该温度已追加到 temps 中,也不会使有效长度多算1。若一直检查到数据末尾,则 j=n,j−i 正好计入最后一个合格时段。故空②填 j+=1。

第(3)小题

参考答案

not (L <= flow <= R)

共用程序分析见第(2)小题。

填空分析

L <= flow <= R

加框条件成立时会执行 break,但原条件 L <= flow <= R 表示当前人流量符合要求,反而会在合法时段提前退出。应在人流量不属于[L,R]时结束当前起点的向后检查,因此改为 not (L <= flow <= R),也可写成 flow < L or flow > R。L、R 两个端点均允许取到,不能把小于、大于改成小于等于、大于等于。

人流量不合格时不能直接跳过这一小时继续累计,否则会把不连续的时段拼接成活动时段;退出本次 while 后,外层循环仍会尝试后面的其他起点。