方法一:采用了递归的方法,运到做括号就递归一下,在一次递推中先确定头数,遇到有括号返回递归结果。
gets()函数与C++中的getline差不多适合忽略空格的字符串输入
gets()的说明
#include <stdio.h>
#include <cstring>
int ans;
const int maxn = 200;
char s[maxn];
char* sp;
struct M {
int r;
int c;
M(int _r=0, int _c=0):r(_r),c(_c) {}
}m[maxn];
M work() {
M tmp(0,0);
bool isFirst = 1;
while(1) {
if(*sp==')'||*sp=='\0') {
if (*sp=')')
sp++;
return tmp;
} else {
M tt;
if (*sp=='(') {
sp++;
tt=work();
if (tt.r==-1) return tt;
} else {
tt = m[*sp-'A'];
++sp;
}
if (isFirst) {
tmp = tt;
isFirst = 0;
} else {
if(tmp.c!=tt.r) {
tt.r = -1;
return tt;
}
ans+=tmp.r*tmp.c*tt.c;
tmp.c = tt.c;
}
}
}
}
int main() {
int n;
while (scanf("%d\n",&n)!=EOF) {
for (int i=0;i<n;i++) {
char ch;
int r,c;
scanf("%c%d%d\n",&ch,&r,&c);
m[ch-'A'].r = r;
m[ch-'A'].c = c;
}
gets(s);
sp = s;
ans = 0;
M flag = work();
if (flag.r == -1) printf("error\n");
else printf("%ld\n",ans);
}
}