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
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 昨天跟大家嘮了推廣全方案制定的上篇,說了競品分析、產品定位等等,今天咱們來嘮嘮新媒體推廣、線下推廣以及推廣目標的設...
    APP干貨鋪子閱讀 1,066評論 0 25
  • 今天在《頭條》中看到一篇文章,介紹沂州府的。 當時沂州府衙門大門上有一楹聯,據說是清乾隆初年蘭山知縣李方膺所撰寫:...
    卿真閱讀 336評論 0 0
  • Blue編輯 我們日常生活中的很多日常生活用品,例如鍋碗瓢盆等金屬制品,可以說這些原料都是從礦石而來的,即使...
    4551ff0ad16f閱讀 295評論 0 0
  • 上一期發布之后,在眾多朋友的幫助轉發下,閱讀量在24小時之內達到465次,這是我沒有預料到的,非常感謝『建中師生交...
    primates閱讀 497評論 0 0