#include <stdio.h>
#include <memory.h>
#include <string.h>
int Cache[1000];
int Reg[10];
int execute()
{
int steps=0;
int pc=0,ir=0;
int a,b,c;
while(ir!=100 && pc<1000)
{
ir = Cache[pc];
a = ir/100;
b = (ir/10)%10;
c = ir%10;
switch(a)
{
case 0:
if(Reg[c]!=0)
pc = Reg[b]-1;
break;
case 1:
if(b==0 && c==0)
return steps+1;
break;
case 2:Reg[b] = c;
break;
case 3:Reg[b] += c;
break;
case 4:Reg[b] *= c;
break;
case 5:Reg[b] = Reg[c];
break;
case 6:Reg[b] += Reg[c];
break;
case 7:Reg[b] *= Reg[c];
break;
case 8:Reg[b] = Cache[Reg[c]];
break;
case 9:Cache[Reg[c]] = Reg[b];
break;
}
Reg[b] %= 1000;
steps ++;
pc ++;
}
return steps;
}
int main()
{
int num;
int i;
char temp[10]={""};
scanf("%d",&num);
getchar();
getchar();
while(num--)
{
memset(Cache,0,sizeof(Cache));
memset(Reg,0,sizeof(Reg));
i=0;
while(gets(temp)!=NULL)
{
if(!strcmp(temp,"")) break;
sscanf(temp,"%d",&Cache[i++]);
}
printf("%d\n",execute());
if(num) printf("\n");
}
return 0;
}
UVa 10033 Interpreter
最新推荐文章于 2019-07-10 17:43:57 发布