题目大意:给出一个矩阵乘法式子,其中每个矩阵的行列已知,求最终的结果。
表达式的运算,关于栈的运用,运算过程中碰到两个不匹配的矩阵时,则矩阵序列错误。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int a[60][3];
char b[300];
int c[300][2];
int top=0;
int main(void)
{
int i,n,arow,acol,brow,bcol,OK,count,j,le;
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
{
a[i][0]=getchar();
scanf("%d%d",&a[i][1],&a[i][2]);
getchar();
}
while(scanf("%s",b)==1)
{
top=0;
count=0;
le=strlen(b);
if(le==1)
{
b[0]='\0';
printf("0\n");
}
else
{
OK=1;
for(i=0;i<le;i++)
{
if(b[i]=='(')
{
;
}
else if(b[i]==')')
{
brow=c[top][0];
bcol=c[top][1];
top--;
arow=c[top][0];
acol=c[top][1];
top--;
if(acol!=brow)
{
OK=0;
break;
}
else
{
count=count+(brow*arow*bcol);
top++;
c[top][0]=arow;
c[top][1]=bcol;
}
}
else
{
for(j=0;j<n;j++)
{
if(b[i]==a[j][0])
{
top++;
c[top][0]=a[j][1];
c[top][1]=a[j][2];
break;
}
}
}
}
for(j=0;j<le;j++)
{
b[j]=0;
}
if(OK==0)
{
printf("error\n");
}
else
{
printf("%d\n",count);
}
}
}
return 0;
}