第 14 题
答案与解析
第(1)小题
B
44
程序分析
将连续5个数据存入a,并排序 → m←a[2],sum←0,count←0,i←05个数据排序后,下标2对应中间的第3个数,因此m是中位数。sum和count从0开始,为后续符合条件数据的总和与个数作准备;i从0开始遍历5个数据。
虚线框 → avg←sum//count → 输出avg虚线框后执行avg=sum//count,对保留数据的总和与个数作整除,得到整数形式的有效人数。因此,虚线框必须使sum与count对应同一组被保留的数据。
填空分析
虚线框
筛选条件是与中位数的差值不超过3,即|a[i]-m|≤3。只有符合条件时,才能同时增加sum和count;不符合时应跳过该数据。无论是否保留,i都要加1,保证遍历全部5个数据。
有效人数
给出的数据已经按非递减顺序排列,中位数m=46。
| 数据 | 与46的差值绝对值 | 是否保留 |
|---|---|---|
| 42 | 4 | 否 |
| 43 | 3 | 是 |
| 46 | 0 | 是 |
| 50 | 4 | 否 |
| 55 | 9 | 否 |
因此sum=43+46=89,count=2,avg=89//2=44,得到有效人数44。
第(2)小题
r < 0.2
stat[i][1] == 1 and stat[i][0] > maxm
dnum = stat[dst][0]
程序分析
n = len(total);stat = [[0, -1] for i in range(n)]
for i in range(n):
r = cur[i] / total[i]
if r > 0.8:
stat[i] = [int(cur[i] - total[i] * 0.8), 1]
elif ①:
stat[i] = [ceil(total[i] * 0.2 - cur[i]), 0] # ceil函数用于向上取整每个区域先对应一条初始记录[0,-1]。循环计算使用率r。已知if分支在r>0.8时保存需引导人数并标记为1;elif分支保存按题意计算的可接收人数并标记为0,其适用条件由空①补全。结合题干可知,stat[i][0]保存相应人数,stat[i][1]区分拥挤区1、闲置区0和未进入这两个分支的区域-1。拥挤区表达式为正数,int在这里与题设向下取整一致。
src = -1;maxm = 0
for i in range(n):
if ②:
src = i
maxm = stat[i][0]循环按编号从小到大扫描区域,条件成立时同时保存区域编号及其人数。因而src与maxm成对记录当前选中的引导来源和对应的需引导人数。初始src=-1表示尚未选中来源,maxm=0;空②负责决定何时用当前区域替换已保存的选择。
#计算距离src最近的闲置区dst,当没有闲置区时dst的值为-1,代码略
if src != -1 and dst != -1:
③
num = min(dnum,maxm)
print("从",src,"区引导",num,"人到",dst,"区")
else:
print("无需引导")得到最近闲置区dst后,只有来源与目标均存在才执行引导。实际人数num取dnum和已选来源需引导人数maxm的较小值,使人数同时受到两端限制;空③在这里提供目标一侧的人数限制。任一端不存在时,输出“无需引导”。
填空分析
①
elif分支应处理使用率低于20%的闲置区。r已保存当前区域的使用率,因此填写:
r < 0.2
题目使用严格小于号,使用率恰好20%时不属于闲置区;同理,恰好80%时不属于拥挤区。
②
引导来源必须是拥挤区,因此先要求stat[i][1] == 1;还要使其需引导人数超过当前maxm,才更新来源。填写:
stat[i][1] == 1 and stat[i][0] > maxm
循环按编号递增扫描,相同人数时用严格大于号便不会覆盖先选中的较小编号;若写成>=,后遇到的较大编号会覆盖原选择。若没有正的需引导人数,src保留-1,符合无需实际转移人员的处理。
③
目标区域为dst,stat[dst][0]保存该闲置区的可接收人数。后续要用dnum参与min运算,因此需先赋值:
dnum = stat[dst][0]
这样num既不超过来源区域的需引导人数,也不超过目标区域按题设规则给出的可接收人数。
问题反馈
解析有疑问或显示异常?请先复制题目信息,再打开反馈表单填写。
题目编号:2026_03_G3_mingxiaoxiezuoti_q014
