模拟题
#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <set>
#include <cctype>
#include <algorithm>
#include <cmath>
#include <deque>
#include <queue>
#include <map>
#include <stack>
#include <list>
#include <iomanip>
using namespace std;
///
#define INF 0xffffff7
#define maxn 1010
///
char mem[maxn][10];
int regesters[12];
//字符串转化为整数
int ati(char *temp)
{
int len = strlen(temp);
int i;
int sum(0);
for (i = len - 1; i >= 0; i--)
{
sum += (temp[i] - '0') * pow(10, len - 1 - i);
}
return sum;
}
//整数转化为字符串
void ita(int temp, char *out)
{
int i = 0;
while (temp / 10 != 0)
{
out[i] = temp % 10 + '0';
temp /= 10;
i++;
}
out[i] = '0' + temp;
out[++i] = '\0';
int len = strlen(out);
i = 0;
while (i < len / 2)
{
char tmp = out[i];
out[i] = out[len - 1 - i];
out[len - 1 - i] = tmp;
i++;
}
}
//寄存器d的值设为n
void _2(char *cmd)
{
int d, n;
d = cmd[1] - '0';
n = cmd[2] - '0';
regesters[d] = n;
}
//寄存器d的值增加n
void _3(char *cmd)
{
int d, n;
d = cmd[1] - '0';
n = cmd[2] - '0';
regesters[d] = (regesters[d] + n) % 1000;
}
//寄存器d的值乘以n
void _4(char *cmd)
{
int d, n;
d = cmd[1] - '0';
n = cmd[2] - '0';
regesters[d] = (regesters[d] * n) % 1000;
}
//寄存器s的值拷贝到寄存器d
void _5(char *cmd)
{
int d, s;
d = cmd[1] - '0';
s = cmd[2] - '0';
regesters[d] = regesters[s];
}
//寄存器s的值加到寄存器d
void _6(char *cmd)
{
int d, s;
d = cmd[1] - '0';
s = cmd[2] - '0';
regesters[d] = (regesters[s] + regesters[d]) % 1000;
}
//寄存器s的值乘到寄存器d
void _7(char *cmd)
{
int d, s;
d = cmd[1] - '0';
s = cmd[2] - '0';
regesters[d] = (regesters[s] * regesters[d]) % 1000;
}
//地址为寄存器a的内存的值拷贝到寄存器d
void _8(char *cmd)
{
int d, a;
d = cmd[1] - '0';
a = cmd[2] - '0';
regesters[d] = ati(mem[regesters[a]]);
}
//寄存器s的值拷贝到地址为a的内存
void _9(char *cmd)
{
int s, a;
s = cmd[1] - '0';
a = cmd[2] - '0';
// mem[regesters[a]] = regesters[s];
ita(regesters[s], mem[regesters[a]]);
}
void _0(char *cmd, int &i)
{
int d, s;
d = cmd[1] - '0';
s = cmd[2] - '0';
if (regesters[s] != 0)
{
i = regesters[d] - 1;
}
}
int main()
{
///
int i, j, k, cmds;
int ncases;
char temp[10];
scanf("%d", &ncases);
getchar();
gets(temp);
while (ncases--)
{
memset(regesters, 0, sizeof(regesters));
for(i = 0; i < 1000; i++)
strcpy(mem[i], "000");
int cnt(0);
i = 0;
while (1)
{
gets(mem[i]);
if (!strcmp(mem[i], ""))
break;
i++;
}
cmds = i;
bool flag = false;
for (i = 0; i < cmds; i++)
{
cnt++;
switch(mem[i][0])
{
case '1':
flag = true;
break;
case '2':
_2(mem[i]);
break;
case '3':
_3(mem[i]);
break;
case '4':
_4(mem[i]);
break;
case '5':
_5(mem[i]);
break;
case '6':
_6(mem[i]);
break;
case '7':
_7(mem[i]);
break;
case '8':
_8(mem[i]);
break;
case '9':
_9(mem[i]);
break;
case '0':
_0(mem[i], i);
break;
}
if (flag == true)
break;
}
printf("%d\n", cnt);
if (ncases != 0)
printf("\n");
}
///
return 0;
}