跳到主要内容

解题方法


标准解法步骤

Step 1 — 弹出第一个值作为 total

total ← POP(stack)
  • 如果栈为空 → total 为 0(罕见,但需注意)

Step 2 — 循环处理剩余元素

WHILE stack 非空
op ← POP(stack) // 弹出运算符
val ← POP(stack) // 弹出操作数
IF op = '+' THEN total ← total + val
IF op = '-' THEN total ← total - val
IF op = '*' THEN total ← total * val
IF op = '/' THEN total ← total / val
ENDWHILE

Trace Table 写法

建议按以下格式记录:

StepPoppedTotalWorking
1555
2125wait
3+175 + 12 = 17
4317wait
5*5117 * 3 = 51

关键:不要省略 working 列——这是判卷时 M1–M5 得分的直接依据。


技巧总结

  1. 先弹先算:第一个弹出值 = total,不是等待运算符。
  2. 每次运算符 + 一个操作数:弹出 + 后,再弹一个数字,做运算。
  3. 最终结果:栈被清空时的 total 即为答案。
  4. 检查方向-/ 顺序敏感——total - val 而非 val - total

示例

9618/s25/qp/42 Q1e — Stack: top 512+3*
StepPoppedTotalWorking
155total = 5
2125wait
3+175 + 12 = 17
4317wait
5*5117 * 3 = 51

Final answer: 51

9618/w24/qp/42 Q1d — Stack: top 103-2*
StepPoppedTotalWorking
11010total = 10
2310wait
3-710 - 3 = 7
427wait
5*147 * 2 = 14

Final answer: 14


相关页面