深耕专业教研,探索前沿技术
信息技术来源:镇海中学2026年5月高三高考模拟考试

第 14 题

答案与解析

第(1)小题

参考答案

SN

普通方向指令按顺序入栈,B 撤销最后一条仍有效的指令,即使栈顶元素出栈。按日志 EBSSBNEB 依次处理:

读入指令 操作 有效路径(栈底→栈顶)
初始 — 空
E E 入栈 E
B 撤销 E 空
S S 入栈 S
S S 入栈 S,S
B 撤销最后一个 S S
N N 入栈 S,N
E E 入栈 S,N,E
B 撤销 E S,N

返航时先逆转最后的 N,执行 S;再逆转此前的 S,执行 N,得到 SN。虽然这两步的净位移为零,题目要求按有效路径原路返航,仍需保留两条指令。

第(2)小题

参考答案
  1. stack.pop()

  2. len(stack)>0

  3. opp[curr]

程序分析

path_log = "NEEBSNBBWE"
stack = []
for cmd in path_log:
    if cmd == "B":
        if len(stack) > 0:
            ①
    else:
        stack.append(cmd)

for 循环逐个字符处理 path_log。普通方向指令通过 stack.append(cmd) 加到列表末尾,后读入的指令位于末尾。题目规定 B 撤销最近一次有效移动,符合栈“后进先出”的特点,因此用列表 stack 模拟栈,列表末尾为栈顶。遇到 B 时,先用 len(stack)>0 判断是否存在可撤销的指令,再执行空①。

opp = {'N': 'S', 'S': 'N', 'E': 'W', 'W': 'E'}
cmds = ""
while ②:
    curr = stack.pop()
    cmds += ③
print("安全返航的指令序列为:", cmds)

字典 opp 保存方向与反方向的对应关系,如 N 对应 S、E 对应 W。cmds 初值为空字符串,用于拼接返航指令。while 循环每轮通过 stack.pop() 取出并删除栈顶指令,保存到 curr,取出的顺序与栈中指令原来的先后顺序相反;空③的结果再追加到 cmds。

填空分析

①

B 需要撤销最后一条有效移动,该指令位于栈顶,所以填 stack.pop(),删除列表末尾元素。外层的非空判断已保证有元素可删;B 本身不入栈。

②

返航时应逐条处理全部有效指令,栈非空就继续取出栈顶,栈空时结束,故填 len(stack)>0,也可填 stack!=[] 或 stack。若空栈时仍进入循环,下一行 stack.pop() 会报错。

③

curr 已保存本轮取出的原飞行指令,应根据字典 opp 查出它的反方向并追加到 cmds,所以填 opp[curr]。出栈完成顺序反转,字典查找完成方向反转,二者共同生成原路返航指令。