题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1267
Description
现在有26个变量,分别用a~z表示,它们的初值均为0。接下来一共有N个操作,这些操作一共分为如下6类:
(1) mov a,b : 将变量b的值赋给a,相当于a = b,其中a、b泛指两个变量。
(2) mov a,10 : 将10赋给a,相当于a = 10,其中a泛指某个变量,10泛指某个不大于20的正整数。
(3) add a,b : 计算a + b的值并将其赋给变量a,相当于a = a + b,其中a、b泛指某两个变量。
(4) sub a,b : 计算a – b的值并将其赋给变量a,相当于a = a – b,其中a、b泛指某两个变量。
(5) add a,10 : 计算a + 10的值并将其赋给变量a,相当于a = a + 10,其中a泛指某个变量,10泛指某个不大于20的正整数。
(6) sub a,10 : 计算a – 10的值并将其赋给变量a,相当于a = a – 10,其中a泛指某个变量,10泛指某个不大于20的正整数。
(7) print a : 用一行输出变量a的值,其中a泛指某个变量。
你需要依次执行这N个操作,并且当遇到第(7)类操作时,按要求输出该变量的值。
Input
输入数据的第一行包含一个整数N (1 <= N <= 10^5),表示一共有N个操作。
接下来一共有N行,每行均包含一个形如上述的操作。
Output
对于每个第(7)类操作,用一行输出一个整数,表示该变量的值。
数据保证在运算过程中每个变量的值均不会超过10^9。
Sample Input
10
print c
add c,10
mov a,c
add a,a
print a
sub a,5
sub b,a
print b
sub c,b
print c
Sample Output
0
20
-15
25
HINT
Source
代码如下:
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
#include <iostream>
#include <string>
string ss;
int main()
{
int n;
int f[27];
char s[10];
while(~scanf("%d",&n))
{
memset(f,0,sizeof(f));
memset(s,0,sizeof(s));
char a, b;
for(int i = 0; i < n; i++)
{
cin>>ss;
if(ss == "print")
{
cin>>a;
printf("%d\n",f[a-'a']);
}
else if(ss == "mov")
{
cin>>a>>b>>s;
if(s[0]>='0' && s[0] <= '9')
{
int num = 0;
int len = strlen(s);
for(int j = 0; j < len; j++)
{
num = num*10+s[j]-'0';
}
f[a-'a'] = num;
}
else
f[a-'a'] = f[s[0]-'a'];
}
else if(ss == "add")
{
cin>>a>>b>>s;
if(s[0]>='0' && s[0] <= '9')
{
int num = 0;
int len = strlen(s);
for(int j = 0; j < len; j++)
{
num = num*10+s[j]-'0';
}
f[a-'a'] += num;
}
else
f[a-'a'] += f[s[0]-'a'];
}
else if(ss == "sub")
{
cin>>a>>b>>s;
if(s[0]>='0' && s[0] <= '9')
{
int num = 0;
int len = strlen(s);
for(int j = 0; j < len; j++)
{
num = num*10+s[j]-'0';
}
f[a-'a'] -= num;
}
else
f[a-'a'] -= f[s[0]-'a'];
}
}
}
return 0;
}