第 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)小题
sumB < avg * 0.9 or sumB > avg * 1.1
abs(water[i][j] - water[i][k]) > maxD
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 ①:
continuesumB是当前楼栋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从小到大遍历,记录后立即退出楼栋循环,保留的就是最小符合条件的编号。
问题反馈
解析有疑问或显示异常?请先复制题目信息,再打开反馈表单填写。
题目编号:2026_04_G3_tianyuxiezuoti_q013
