深耕专业教研,探索前沿技术
信息技术来源:2025学年第二学期浙江省名校协作体高三试题

第 14 题

答案与解析

第(1)小题

参考答案
  1. B

  2. 44

程序分析

将连续5个数据存入a,并排序 → m←a[2],sum←0,count←0,i←0

5个数据排序后,下标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个数据。

A

不符合。差值超过3时仍将中位数m累加到sum,并且每一轮都令count加1,等于用中位数替换异常数据后计算5个数的平均值,不是筛除异常数据。

B

符合。仅在diff≤3时累加a[i]并使count加1,不符合时直接进入i加1;sum与count分别记录保留数据的总和与个数。

有效人数

给出的数据已经按非递减顺序排列,中位数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)小题

参考答案
  1. r < 0.2

  2. stat[i][1] == 1 and stat[i][0] > maxm

  3. 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既不超过来源区域的需引导人数,也不超过目标区域按题设规则给出的可接收人数。