深耕专业教研,探索前沿技术
信息技术来源:宁波“十校”2026届高三3月联考技术试题卷

第 12 题

答案与解析

本题解析

参考答案

A

程序分析

a=[1,2,4,8,9,11,15,18]
for i in range(a[len(a)-1]-a[0],-1,-1):
    ...

数组 a 已按升序排列。range 的起始值为 18-1=17,因此外层循环中的 i 依次取 17、16、……、0。每个 i 对应一轮内层扫描。

tot=1;num=0
for j in range(1,len(a)):
    if a[j]-a[num]>=i:
        tot+=1
        num=j

初始 tot=1、num=0,表示先选取 a[0]。之后用 j 从左到右扫描,当 a[j] 与 a[num] 的差不小于 i 时,选取 a[j],令 tot 加 1,并把 num 更新为 j。因此 num 始终记录最近选中元素的下标,tot 记录已选元素个数,i 是相邻两次选中元素之间的最小间隔。

由于数组升序排列,每次选取最早满足间隔要求的元素,能为后续元素保留尽可能大的选择空间,从而得到该间隔下可选的最多元素个数。

if tot>=t:
    break

一轮扫描结束后,若至少能选出 t 个元素,就结束外层循环。因为 i 从大到小尝试,停止时的 i 是能够选出至少 t 个元素的最大间隔。

最终 i=3,说明 i=4 时尚未满足 tot≥t,而 i=3 时满足。减小间隔不会减少可选的最多元素个数,因此只需比较这两个相邻间隔:

i 按程序选中的元素 tot
4 1,8,15 3
3 1,4,8,11,15,18 6

要跳过 i=4,必须有 3<t;要在 i=3 停止,必须有 t≤6。故满足条件的是 3<t≤6,选项中的 4、5、6 都可能,3 不可能。若 t=3,程序在 i=8 时就能选出 1、9、18,不会继续执行到 i=3。