信息技术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 -=1s初值为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,循环结束。
