深耕专业教研,探索前沿技术
信息技术来源:2025学年第二学期天域全国名校协作体高三4月联考

第 13 题

答案与解析

第(1)小题

参考答案

0

三栋楼的日均用水总量分别为134、100、143升,平均值为(134+100+143)÷3=377÷3升,因此允许范围为[113.1,138.233…]升。

索引为0的楼栋总量为134升,在允许范围内。选取该栋用水量为32升的楼层,它与其余三层的差值分别为3、1、2升,均不超过5升,满足“至少1层”的要求。该栋索引已是最小值0,因此填写0。

第(2)小题

参考答案
  1. sumB < avg * 0.9 or sumB > avg * 1.1

  2. abs(water[i][j] - water[i][k]) > maxD

  3. i

程序分析

water = [[32,35,33,34], [24,23,27,26], [30,43,36,34]]
stableBldg= -1
total = sum(sum(b) for b in water)  # 所有楼栋总用水量
avg = total / len(water)

water的每个子列表对应一栋楼,子列表中的4个数对应各层用水量。内层sum(b)求一栋楼的总量,外层sum汇总所有楼栋,再除以楼栋数得到楼栋总量的平均值avg。stableBldg初值为-1,用来表示尚未找到符合要求的楼栋。

for i in range(len(water)):
    ...

i按0、1、2的顺序遍历楼栋。循环内先处理当前楼栋,再决定是否继续考察下一栋。

    sumB = sum(water[i])
    if ①:
        continue

sumB是当前楼栋4层用水量之和。条件①成立时执行continue,直接开始下一轮楼栋循环,跳过当前楼栋后续的楼层检查。

    stableFloor = False
    for j in range(4):
        maxD = 0
        for k in range(4):
            if ②:
                maxD = abs(water[i][j] - water[i][k])
        if maxD <= 5:
            stableFloor = True
            break

每栋楼开始检查时,stableFloor先置为False。j依次选取本栋的一个楼层,每次都把maxD重置为0,再用k遍历本栋各层,计算与当前j层的绝对差。

结合后面的maxD<=5可知,maxD需要记录当前j层与各层用水量差值的最大值;这样,一次比较就能判断该层是否与其余每层都相差不超过5升。k=j时绝对差为0,不影响最大值。找到符合要求的楼层后,将stableFloor置为True并退出j循环,落实题目“至少1层”的要求。

    if stableFloor:
        stableBldg = ③
        break

完成楼层检查后,仅在stableFloor为True时给stableBldg赋值,随后break退出楼栋循环,停止继续查找。

if stableBldg != -1:
    print("稳定用水楼栋编号:", stableBldg)
else:
    print("无稳定用水楼栋")

循环结束后,stableBldg仍为-1就输出“无稳定用水楼栋”,否则输出记录的楼栋编号。

填空分析

①

题目要求总量位于平均值的±10%范围内,即avg * 0.9 <= sumB <= avg * 1.1。这里条件成立后执行continue,所以应填写不在该范围内的条件:

sumB < avg * 0.9 or sumB > avg * 1.1

两端都属于允许范围,不能在跳过条件中使用<=或>=。也可写为not(avg * 0.9 <= sumB <= avg * 1.1)。

②

if成立后会把当前绝对差赋给maxD。为使maxD始终保存已比较楼层中的最大差值,只有当前差值比maxD大时才需要更新,填写:

abs(water[i][j] - water[i][k]) > maxD

绝对值保证两个方向的差值都按相差的升数比较。

③

当前满足条件的楼栋由外层循环下标i标识,题目要求输出索引,所以填写i。i从小到大遍历,记录后立即退出楼栋循环,保留的就是最小符合条件的编号。