浙江高中技术 · 每一道题,认真读懂
信息技术2026年1月浙江选考

第 11 题

栈

答案与解析

本题解析

参考答案

C

程序分析

s=0
while topa!=-1:
    while topb!=-1 and stka[topa]>stkb[topb]:
        ...
    if topb!=-1:
        topb-=1
    s+=stka[topa]
    topa -=1

s初值为0。外层循环以topa是否为-1判断是否继续,每轮先执行内层循环,再处理剩余的stkb元素并累加stka中的当前元素。两部分的具体作用如下。

while topb!=-1 and stka[topa]>stkb[topb]:
    if(stka[topa]+stkb[topb])%2==1:
        topa +=1
        stka[topa]=stkb[topb]
    topb -= 1

程序通过topa、topb访问两个数组的当前末端:topa加1后写入新元素,相当于向栈A入栈;topb减1则使栈B的当前栈顶退出有效区间,相当于出栈。

当B非空且A栈顶大于B栈顶时,检查两数之和:和为奇数,即奇偶性不同,就把B栈顶压入A;无论是否压入A,B的该元素都会出栈。压入后A栈顶随即改变,下一次比较必须使用新的栈顶值。

if topb!=-1:
    topb-=1
s+=stka[topa]
topa -=1

内层循环结束后,若B仍非空,此时A栈顶不大于B栈顶,程序将B栈顶直接出栈。随后将A的当前栈顶累加到s,再令其出栈。因此s累计的是A在各轮外层循环末尾出栈的元素。A为空时topa=-1,外层循环结束。

初始A只有一个有效元素6,后面的0是空余位置;B的有效元素为2、7、2、1、5。各轮变化如下:

外层轮次 内层循环及B的处理 累加前的A(栈底→栈顶) 处理后的B(栈底→栈顶) 本轮A出栈值 s
1 6与5奇偶不同,5压入A;5与1奇偶相同,只将1从B弹出;5与2奇偶不同,2压入A;随后2>7不成立,退出内层循环并弹出B中的7 6,5,2 2 2 2
2 5>2且奇偶不同,2压入A,B变空 6,5,2 空 2 4
3 B为空,跳过对B的处理 6,5 空 5 9
4 B为空,跳过对B的处理 6 空 6 15

A依次弹出2、2、5、6,s=2+2+5+6=15。最后topa=-1,循环结束。