機器 PpMm 擁有:
內存 M1, M2(初始值由輸入給定)
寄存器 R1, R2, R3(初始 0)
六條指令:
| 指令 | 操作 |
|---|---|
| A | R1 = M1 |
| B | R2 = M2 |
| C | M1 = R3 |
| D | M2 = R3 |
| E | R3 = R1 + R2 |
| F | R3 = R1 - R2 |
輸入多組:每組兩行,第一行 M1 M2,第二行指令串(長 ≤ 200,僅含 A-F)。輸出最終 M1,M2(逗號分隔)。
狀態變量:m1, m2, r1, r2, r3。遍歷指令串 switch 執行對應操作。中間結果保證在 32 位有符號範圍內,int 足夠。
#include
#include
int main() {
int m1, m2; char cmd[205];
while (scanf("%d %d %s", &m1, &m2, cmd) == 3) {
int r1 = 0, r2 = 0, r3 = 0;
for (char *p = cmd; *p; ++p) {
switch (*p) {
case 'A': r1 = m1; break;
case 'B': r2 = m2; break;
case 'C': m1 = r3; break;
case 'D': m2 = r3; break;
case 'E': r3 = r1 + r2; break;
case 'F': r3 = r1 - r2; break;
}
}
printf("%d,%d\n", m1, m2);
}
return 0;
}
輸入:100 288 ABECED
A: R1=100
B: R2=288
E: R3=388
C: M1=388
E: R3=388 (R1,R2 未變)
D: M2=388
輸出:388,388 ✓
純模擬題,無算法難度。關鍵在於:準確理解指令語義、正確初始化寄存器、處理多組輸入至 EOF。代碼極短,適合作為狀態機模擬的入門練習。