解题方法
标准解法步骤
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 写法
建议按以下格式记录:
| Step | Popped | Total | Working |
|---|---|---|---|
| 1 | 5 | 5 | 5 |
| 2 | 12 | 5 | wait |
| 3 | + | 17 | 5 + 12 = 17 |
| 4 | 3 | 17 | wait |
| 5 | * | 51 | 17 * 3 = 51 |
关键:不要省略 working 列——这是判卷时 M1–M5 得分的直接依据。
技巧总结
- 先弹先算:第一个弹出值 =
total,不是等待运算符。 - 每次运算符 + 一个操作数:弹出
+后,再弹一个数字,做运算。 - 最终结果:栈被清空时的
total即为答案。 - 检查方向:
-和/顺序敏感——total - val而非val - total。
示例
9618/s25/qp/42 Q1e — Stack: top 5 → 12 → + → 3 → *
| Step | Popped | Total | Working |
|---|---|---|---|
| 1 | 5 | 5 | total = 5 |
| 2 | 12 | 5 | wait |
| 3 | + | 17 | 5 + 12 = 17 |
| 4 | 3 | 17 | wait |
| 5 | * | 51 | 17 * 3 = 51 |
Final answer: 51
9618/w24/qp/42 Q1d — Stack: top 10 → 3 → - → 2 → *
| Step | Popped | Total | Working |
|---|---|---|---|
| 1 | 10 | 10 | total = 10 |
| 2 | 3 | 10 | wait |
| 3 | - | 7 | 10 - 3 = 7 |
| 4 | 2 | 7 | wait |
| 5 | * | 14 | 7 * 2 = 14 |
Final answer: 14