1. 程式人生 > >藍橋杯 基礎練習 矩陣乘法

藍橋杯 基礎練習 矩陣乘法

問題描述

  給定一個N階矩陣A,輸出A的M次冪(M是非負整數)
  例如:
  A =

  1 2
  3 4
  A的2次冪
  7 10
  15 22

輸入格式

  第一行是一個正整數N、M(1<=N<=30, 0<=M<=5),表示矩陣A的階數和要求的冪數
  接下來N行,每行N個絕對值不超過10的非負整數,描述矩陣A的值

輸出格式

  輸出共N行,每行N個整數,表示A的M次冪所對應的矩陣。相鄰的數之間用一個空格隔開

樣例輸入

2 2
1 2
3 4

樣例輸出

7 10
15 22

#include<iostream>

using namespace std;

//輸出矩陣,因為方陣的mn相同,所以只需要兩個迴圈遍歷一下就行
void display(int c[][101],int n){
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cout<<c[i][j]<<" ";
        }
        cout<<endl;
    }
}

//矩陣乘法,遍歷矩陣的長和寬。不用同一個m的原因在於不好表示變數的變化
void matrix(int a[][101],int b[][101],int c[][101],int n,int m){
    for(int p=1;p<m;p++){
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                int t=0;
                for(int k=0;k<n;k++){
                    t+=a[i][k]*b[k][j];
                    c[i][j]=t;
                }
            }
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                b[i][j]=c[i][j];
            }
        }
    }
}

int main(){
    int n,m;
    int a[101][101]={0},b[101][101]={0},c[101][101]={0};
    cin>>n>>m;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cin>>a[i][j];
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            b[i][j]=a[i][j];
        }
    }
    //需要判斷矩陣的次祕書,如果是0次冪,那麼矩陣裡面所有元素都為0,如果是1次冪,就將原矩陣輸出,負責按照矩陣乘法進行計算
    if(m==0){
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                if(i==j)
                    c[i][j]=1;
            }
        }
        display(c,n);
    }
    else if(m==1){
        display(a,n);
    }
    else{
        matrix(a,b,c,n,m);
        display(c,n);
    }
    return 0;
}


通過檢驗,不喜勿噴,畢竟我是菜鳥 嘿嘿嘿