信息技术来源:湖州、衢州、丽水2026年4月三地市高三教学质量检测
第 12 题
答案与解析
本题解析
参考答案
A
程序分析
from random import randint
n=len(a)
stk=[0]*n
top=-1
s=0
for i in range(n):
if a[i]==-1:
if randint(0,1)==1 and top!=-1: # randint(0,1)随机生成0或1
s+=stk[top]
top-=1
else:
top+=1
stk[top]=a[i]stk预先分配n个存储位置,top初值为-1,s初值为0。循环依次处理a中的元素:遇到非-1元素,先增加top,再把元素存入stk[top];遇到-1时,只有随机数为1且top不为-1,才把stk[top]加入s并将top减1,否则保持不变。
存入和取出都在top所指位置进行,后存入的元素先被取出,因此stk用来模拟栈,top为栈顶下标,-1表示空栈,s是已出栈元素之和。减小top即完成逻辑出栈,不需要清除数组中留下的旧值。
前两个-1分别出现在1和2之后。这一阶段可能都不出栈,只弹出1,只弹出2,或依次弹出1、2,所以累计和可能为0、1、2、3。
随后4、8、16依次入栈,新增部分按“栈底→栈顶”为4、8、16。末尾只有两个-1,至多出栈两次:不出栈时新增和为0;出栈一次只能弹出16;出栈两次依次弹出16、8,新增和为24。4及其下方元素均不会在这一阶段出栈。
两阶段组合得到:
| 末尾出栈次数 | 末尾新增和 | 最终s的可能值 |
|---|---|---|
| 0 | 0 | 0、1、2、3 |
| 1 | 16 | 16、17、18、19 |
| 2 | 24 | 24、25、26、27 |
选项中只有25在可能值内。例如四次随机数依次为1、0、1、1时,依次弹出1、16、8,得到s=1+16+8=25。
问题反馈
解析有疑问或显示异常?请先复制题目信息,再打开反馈表单填写。
题目编号:2026_04_G3_huquli_q012
