简单题:
首先结构体存前n-1个字符值的表(注意去重),最后处理计算式就行了;哎,竟然wa了几次才对,水啊!!!!!!!!
#include<stdio.h>
#include<string.h>
typedef struct
{
__int64 n;
char chars[20];
}A;
A a[10003];
int an;
__int64 mygets(char *s)
{
__int64 n,i,sn=0,f=1;
if(s[0]>='a'&&s[0]<='z')
{
for(i=0;i<an-1;i++)
if(strcmp(a[i].chars,s)==0)
return a[i].n;
}
if(s[0]=='-')
{
f=-1;
s++;
}
n=strlen(s);
for(i=0;i<n;i++)
sn=sn*10+(s[i]-'0');
return sn*f;
}
int main ()
{
char s[30],x[3];
__int64 t,i,sn,d,k;
scanf("%I64d",&t);
while(t--)
{
scanf("%I64d",&an);
for(i=0;i<an-1;i++)
{
scanf("%s = %I64d",a[i].chars,&a[i].n);
for(k=0;k<i;k++)
if(strcmp(a[i].chars,a[k].chars)==0)
{
a[k].n=a[i].n;
i--;
an--;
break;
}
}
sn=0;
scanf("%s",s);
sn=mygets(s);
while(1)
{
scanf("%s",x);
if(strcmp(x,"=")==0)
{
scanf("%s",x);
break;
}
scanf("%s",s);
d=mygets(s);
if(strcmp(x,"+")==0)
sn+=d;
else sn-=d;
}
printf("%I64d\n",sn);
}
return 0;
}
然wa了几次才对,水啊!!!