LRJ入门经典(基础篇)——3.矩阵链乘

3.矩阵链乘

问题描述:
输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法的次数.如果无法进行,输出error.如果A是m*n矩阵,B是n*p的矩阵,乘法次数为m*n*p如果A的列数不等于B的行数,则乘法无法进行.
思路:
栈的简单应用。定义矩阵结构体;输入矩阵;输入运算公式;遇到字母进栈;遇到‘)’出栈顶两元素;如果无法计算则输出error;如果可以计算则将计算结果入栈更新乘法次数

#include<iostream>
#include<cstdio>
#include<stack>
#include<string>
using namespace std;

struct Matrix {//定义矩阵结构体
    int a, b;
} m[26];

//矩阵栈
stack<Matrix> s;

int main(){
    //输入矩阵信息
    int n;
    cin >> n;
    for(int i=0;i<n;i++){
        string name;
        cin>>name;
        //将矩阵名字映射成数字
        int k = name[0] - 'A';
        cin >> m[k].a >> m[k].b;
    }

    //输入运算公式
    string expr;
    while(cin >> expr){
        int length = expr.length();
        int ans = 0;
        bool state = true;

        for(int i=0;i<length;i++){
            if(isalpha(expr[i])) s.push(m[expr[i]-'A']);
            if(expr[i]==')'){
                //栈顶两元素出栈计算
                Matrix m2 = s.top();
                s.pop();
                Matrix m1 = s.top();
                s.pop();
                //无法计算
                if(m1.b != m2.a){
                    state = true;
                    break;
                }else{//可以计算
                    Matrix m;
                    m.a = m1.a;
                    m.b = m2.b;
                    //计算结果入站
                    s.push(m);
                    //更新乘法次数
                    ans += m1.a*m1.b*m2.b;
                    state = false;
                }
            }

        }

        if(state)
            cout<< "error" <<endl;
        else
            cout<< ans <<endl;
    }
    return 0;
}

测试数据

2
A
2  2
B
2  3
(AB)
12
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 昨天跟大家唠了推广全方案制定的上篇,说了竞品分析、产品定位等等,今天咱们来唠唠新媒体推广、线下推广以及推广目标的设...
    APP干货铺子阅读 4,669评论 0 25
  • 今天在《头条》中看到一篇文章,介绍沂州府的。 当时沂州府衙门大门上有一楹联,据说是清乾隆初年兰山知县李方膺所撰写:...
    卿真阅读 2,732评论 0 0
  • Blue编辑 我们日常生活中的很多日常生活用品,例如锅碗瓢盆等金属制品,可以说这些原料都是从矿石而来的,即使...
    4551ff0ad16f阅读 2,607评论 0 0
  • 上一期发布之后,在众多朋友的帮助转发下,阅读量在24小时之内达到465次,这是我没有预料到的,非常感谢『建中师生交...
    primates阅读 3,359评论 0 0

友情链接更多精彩内容