本题设计了栈的应用,涉及了它后进先出的特点。
#include <iostream>
#include <stack>
#include <cctype>
#include <string>
#include <cstdio>
using namespace std;
struct geshi
{
int a,b;
geshi(int a=0,int b=0):a(a),b(b){}
} juzhen[26];
stack<geshi> zhan;
int main()
{
int n;
cin>>n;
string name;int h,l;
for(int i=0;i<=n-1;i++)
{cin>>name;
char c=name[0]-'A';
cin>>h>>l;
juzhen[c].a=h;juzhen[c].b=l;
}
// for(int i=0;i<=25;i++)
// {
// char ccc=i+'A';
// cout<<ccc<<" ";
// cout<<juzhen[i].a<<" "<<juzhen[i].b<<endl;
// }
string op;
while(cin>>op)
{
int sum=0;
int len=(int)op.length();int no=0;
for(int i=0;i<=len-1;i++)
{
if(isalpha(op[i]))
{
zhan.push(juzhen[op[i]-'A']);
}
else if(op[i]==')')
{
geshi x2=zhan.top();zhan.pop();
geshi x1=zhan.top();zhan.pop();
if(x1.b!=x2.a)
{
no=1;
break;
}
sum+=x1.a*x1.b*x2.b;
zhan.push(geshi(x1.a,x2.b));
}
}
if(no==1)cout<<"error\n";
else cout<<sum<<endl;
}
}
其中,对于每条指令的判断:
如果为一个矩阵,就放入栈中,代表其将要被处理;
如果是一个“)”,则代表要将最后的两个矩阵进行乘法计算,
且将二者合为一,再次放入栈中。这一步就实现了栈中的元素的合并。