题意很好理解,给出n行式子,分别给各种未知量赋值,最后一行一个式子进行输出,就像是解一个方程组。因为不确定是变量还是确切的数字,所以输入的时候必须要用字符数组的方式来输入,然后再判断为数字还是变量。在给变量赋值的时候直接利用map存就可以了,这样最后式子引用的时候比较方便一些,另外还要注意的是正负数的问题,数字以及变量都有可能是负的,这样就需要分类讨论,其余的只要一步一步模拟就没什么问题了。
下面AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
char s[105];
char k[15];
int main()
{
int T;
int n;
int a,b;
int i;
int sum;
int len;
int t;
int f;
scanf("%d",&T);
while(T--)
{
t=1;
f=0;
sum=0;
map<string,int>m;
scanf("%d",&n);
for(i=0;i<n-1;i++)
{
scanf("%s",s);
scanf("%s",k);
scanf("%d",&a);
m[s]=a;
//cout<<"m["<<s<<"]="<<m[s]<<endl;
}
while(t)
{
scanf("%s",s);
if(s[0]>='0'&&s[0]<='9')
{
b=0;
len=strlen(s);
for(i=0;i<len;i++)
{
b=b*10+(s[i]-'0');
}
if(f==0)
sum=sum+b;
else
sum=sum-b;
//cout<<"!!! "<<sum<<endl;
}
else if(s[0]=='-')
{
b=0;
len=strlen(s);
for(i=1;i<len;i++)
{
b=b*10+(s[i]-'0');
}
if(f==0)
sum=sum-b;
else
sum=sum+b;
}
else if(f==0)
sum=sum+m[s];
else
sum=sum-m[s];
scanf("%s",k);
if(k[0]=='=')
t=0;
if(k[0]=='-')
f=1;
else
f=0;
//cout<<" "<<sum<<endl;
}
scanf("%s",k);
cout<<sum<<endl;
}
return 0;
}