信息技术来源:2025学年第二学期北斗星盟高三适应性联考
第 11 题
答案与解析
本题解析
参考答案
B
程序分析
a=[1,2,5,5,6,7,8,11]
n=len(a) ; c=[0]*(n+1)
for i in range(n):
k=a[i]
if k>n:
k=n
c[k]+=1列表 c 的各项初值为0。循环取出 a[i] 作为下标 k,再将 c[k] 加1;若 a[i]>n,则先把 k 改为 n。因此,循环结束时,c[0] 至 c[n-1] 分别记录对应数值的出现次数,c[n] 记录大于或等于 n 的元素个数。
k=n
while c[k]<k and k>0:
k-=1
c[k]+=c[k+1]从 k=n 开始检查,此时 c[n] 已表示大于或等于 n 的元素个数。若 c[k]<k 且 k>0,就将 k 减1,再把 c[k+1] 加到 c[k] 上:原 c[k] 统计等于当前 k 的元素,c[k+1] 已统计大于或等于 k+1 的元素,两者合并后,c[k] 就表示大于或等于当前 k 的元素个数。
因此,每次判断循环条件时,都是比较“大于或等于 k 的元素个数”与 k。k 从 n 逐步减小,遇到 c[k]≥k 时停止;若一直不满足,则减至0后停止。
本题 n=8,数值11与8都计入 c[8]。计数结束后,c=[0,1,1,0,0,2,1,1,2]。随后从 k=8 开始累加:
| 判断时的 k | c[k]:大于或等于 k 的元素个数 | 是否继续循环 |
|---|---|---|
| 8 | 2 | 2<8,继续 |
| 7 | 1+2=3 | 3<7,继续 |
| 6 | 1+3=4 | 4<6,继续 |
| 5 | 2+4=6 | 6≥5,停止 |
当 k=5 时,已有6个元素大于或等于5,循环条件不成立,k 保持为5。
问题反馈
解析有疑问或显示异常?请先复制题目信息,再打开反馈表单填写。
题目编号:2026_05_G3_beidouxingmeng_q011
