简单模拟题,主要就是“地址”,“地址的地址”,“地址里的数据”这几个概念别搞乱脑子就好。C/C++老手应该闭着眼睛也能写出正确的程序来:) 返回 Volume C 索引 返回总索引 // // 10033 - Interpreter // Copyright (c) 2010 by Bo-wen Feng // balonfan@gmail.com // #include <set> #include <map> #include <list> #include <queue> #include <stack> #include <vector> #include <string> #include <sstream> #include <cstdio> #include <cmath> #include <limits> #include <utility> #ifndef ONLINE_JUDGE #include <fstream> std::ifstream cin("in.txt"); std::ofstream cout("out.txt"); // std::ofstream cout(stdout); #else #include <iostream> #endif typedef long long llong; typedef unsigned long long ullong; typedef long double ldouble; using namespace std; #define MAX_MEM 1001 #define MAX_REG 11 char memx[MAX_MEM][4]; int regx[MAX_REG]; int getMem(int i) { return (memx[i][0] * 10 + memx[i][1]) * 10 + memx[i][2]; } void setMem(int i, int value) { memx[i][0] = value / 100; value %= 100; memx[i][1] = value / 10; memx[i][2] = value % 10; } void Run() { char skip[1024]; int ip = 0; memset(memx, 0, sizeof(memx)); memset(regx, 0, sizeof(regx)); for(; !cin.eof(); ++ip) { cin>> memx[ip]; memx[ip][0] -= '0'; memx[ip][1] -= '0'; memx[ip][2] -= '0'; cin.getline(skip, 1024); char next = cin.peek(); if(next < '0' || next > '9') break; } int maxIP = ip; int nRunLines = 0; char* ins; for(ip = 0; ;) { ins = memx[ip]; ++nRunLines; ++ip; switch(ins[0]) { case 1: break; case 2: regx[ins[1]] = ins[2]; break; case 3: regx[ins[1]] = (regx[ins[1]] + ins[2]) % 1000; break; case 4: regx[ins[1]] = (regx[ins[1]] * ins[2]) % 1000; break; case 5: regx[ins[1]] = regx[ins[2]]; break; case 6: regx[ins[1]] = (regx[ins[1]] + regx[ins[2]]) % 1000; break; case 7: regx[ins[1]] = (regx[ins[1]] * regx[ins[2]]) % 1000; break; case 8: regx[ins[1]] = getMem(regx[ins[2]]); break; case 9: setMem(regx[ins[2]], regx[ins[1]]); break; case 0: if(regx[ins[2]] != 0) ip = regx[ins[1]]; break; } if(ins[0] == 1) break; } cout<< nRunLines<< '/n'; } int main(int argc, char* argv[]) { int n; cin>> n; for(int i = 0; i < n; ++i) { if(i > 0) cout<< '/n'; Run(); } return 0; }