a349 - 2. 指令解譯器
題目描述
題目要求模擬一個簡單的電腦指令集,包含 LOAD, STORE, ADD, MOVE 四種指令。程式需要讀取初始記憶體狀態和一系列指令,執行這些指令,並最終輸出暫存器 0 和記憶體 0 的值。
解題思路
這題的核心是模擬指令集。程式需要解析每條指令,並根據指令類型執行相應的操作。
- LOAD: 從記憶體讀取資料到暫存器。
- STORE: 從暫存器寫入資料到記憶體。
- ADD: 將兩個暫存器的值相加,結果存入另一個暫存器。
- MOVE: 將一個暫存器的值複製到另一個暫存器。
程式使用 mem 陣列模擬記憶體,reg 陣列模擬暫存器。程式迴圈讀取指令,並根據指令的字首 (is[0]) 判斷指令類型,然後執行相應的操作。
複雜度分析
- 時間複雜度: O(n),其中 n 是指令的數量。因為程式需要迴圈執行每一條指令。
- 空間複雜度: O(1),因為程式使用的記憶體空間是固定的,不隨輸入大小而變化。
mem和reg陣列的大小都是固定的。
程式碼
#include <iostream>
using namespace std;
int mem[8],n,reg[4],d,s,s2;
string is;
int main(){
for(int i=0;i<8;++i)
cin >> mem[i];
cin >> n;
while(n--){
cin >> is;
if(is[0]=='L'){
cin >> d >> s;
reg[d]=mem[s];
}
else if(is[0]=='S'){
cin >> d >> s;
mem[d]=reg[s];
}
else if(is[0]=='A'){
cin >> d >> s >> s2;
reg[d]=reg[s]+reg[s2];
}
else if(is[0]=='M'){
cin >> d >> s;
reg[d]=reg[s];
}
}
cout << reg[0] << "\n" << mem[0];
}