利用四则运算中的算法技巧--遇到( 就开始递归,遇到)结束
将一个括号内的所有计算好的的矩阵(包括该括号内部括号的返回矩阵)首先保存下来,然后统一计算,并将运算后矩阵的长宽返回给上一级
#include<stdio.h>
#include<string.h>
int n;
void compute(char s[],int arr_size[][2],int len,int size_r[]);
int multi_num;
int main(){
int n;
int arr_size[20][2];
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d %d",&arr_size[i][0],&arr_size[i][1]);
}
int size_r[2];
char s[200] = {0};
scanf("%s",s);
int len = strlen(s);
n = 0;
multi_num = 0;
compute(s,arr_size,len,size_r);
printf("%d\n",multi_num);
}
void compute(char s[],int arr_size[][2],int len,int size_r[]){
// 将属于一个括号的矩阵先保存下来,之后统一计算
int size[26][2];
int i = 0;
while(n<len){
if(s[n]=='('){
n++;
compute(s,arr_size,len,size_r);
size[i][0] = size_r[0];
size[i][1] = size_r[1];
i++;
}
else if(s[n]==')'){
n++;
break;
}
else{
size[i][0] = arr_size[s[n]-'A'][0];
size[i][1] = arr_size[s[n]-'A'][1];
n++;
i++;
}
}
for(int j=0;j<i-1;j++){
multi_num = multi_num + size[j][0]*size[j][1]*size[j+1][1];
size[j+1][0] = size[j][0];
}
size_r[0] = size[0][0];
size_r[1] = size[i-1][1];
}