这个题感觉类似于找BUG那个题,
这个题给你很多运算式子,求解式子的值,主要就是括号问题。
看了例题分析:感觉方法非常巧妙:
利用了栈stack,:
碰到一个字母就入栈,碰到一个右括号“ )”,就出栈两个元素,计算后记录结果,并把结果再次入栈,以此类推,,好巧妙!
也给我一个启示,像这种类似多括号问题,尽量试试stack分析解析式!!
奥 结构体构造函数初始化不能忘,构建新的结构体入栈很方便!
#include<iostream>
#include<cstdio>
#include<stack>
#include<cctype>
using namespace std;
struct martrix{
int m,n;
martrix(int m= 0,int n=0):m(m),n(n){}
}mar[26];
int main()
{
int n;
cin >> n;
string s,p;
for (int i = 0; i < n; ++i){
cin >> s;
int key = s[0] - 'A';
cin >> mar[key].m >> mar[key].n;
}
while(cin >> s){
stack<martrix>st;
int sum = 0;
int len = s.length();
bool ok=true;
for (int i = 0; i < len; ++i){
if (isalpha(s[i]))st.push(mar[s[i]-'A']);
else if (s[i] == ')'){
martrix m2 = st.top();st.pop();
martrix m1 = st.top();st.pop();
if (m1.n != m2.m){ok=false;break;}
sum += m1.m*m1.n*m2.n;
st.push(martrix(m1.m,m2.n));
}
}
if (ok)cout << sum << endl;
else cout << "error" << endl;
}
return 0;
}