模拟题,关键是题意不太好理解,尤其是8,9两条命令不太好理解。
8da: 表示将地址为“寄存器a的值”的内存单元的值拷贝到寄存器d.
9sa:表示将寄存器s的值拷贝到地址为“寄存器d的值”的内存单元.
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
int reg[10];
char inter[1000][5];
void solve()
{
int d, s;
int cct = 0, i = 0, flag = 1;
while(flag)
{
d = inter[i][1]-'0';
s = inter[i][2]-'0';
switch(inter[i][0])
{
case '0':
if(reg[s])
i = reg[d]-1;
break;
case '1':
flag = 0;
break;
case '2':
reg[d] = s;
break;
case '3':
reg[d] += s;
reg[d] %= 1000;
break;
case '4':
reg[d] *= s;
reg[d] %= 1000;
break;
case '5':
reg[d] = reg[s];
break;
case '6':
reg[d] += reg[s];
reg[d] %= 1000;
break;
case '7':
reg[d] *= reg[s];
reg[d] %= 1000;
break;
case '8':
sscanf(inter[reg[s]], "%d", ®[d]);
break;
case '9':
sprintf(inter[reg[s]], "%d", reg[d]);
break;
}
++i;
++cct;
}
printf("%d\n", cct);
}
int main()
{
#ifdef test
freopen("sample.txt", "r", stdin);
#endif
int t;
scanf("%d", &t);
getchar();
getchar();
while(t--)
{
int cct = 0;
memset(reg, 0, sizeof(reg));
memset(inter, 0, sizeof(inter));
while(gets(inter[cct]) != NULL)
{
if(!strcmp(inter[cct], ""))
break;
++cct;
}
solve();
if(t)
puts("");
}
return 0;
}