题解 | #矩阵乘法计算量估算#
矩阵乘法计算量估算
https://www.nowcoder.com/practice/15e41630514445719a942e004edc0a5b
#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);
return 0;
}
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中的第一行开始
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];//10*20*5矩阵乘法计算次数
size[j+1][0] = size[j][0];
}
size_r[0] = size[0][0]; //递归完成后的当前结果存储至临时变量
size_r[1] = size[i-1][1];
}
查看6道真题和解析