1. 程式人生 > >CCF NOI1050. 矩陣乘法 (C++)

CCF NOI1050. 矩陣乘法 (C++)

1050. 矩陣乘法

題目描述

計算兩個矩陣的乘法。nm階的矩陣A乘以mk階的矩陣B得到的矩陣C 是n*k階的,且C[i][j] = A[i][0]*B[0][j] + A[i][1]*B[1][j] + …… +A[i][m-1]*B[m-1]j

輸入

第一行為n, m, k,表示A矩陣是n行m列,B矩陣是m行k列,n, m, k均小於100;然後先後輸入A和B兩個矩陣,A矩陣n行m列,B矩陣m行k列,矩陣中每個元素的絕對值不會大於100。

輸出

輸出矩陣C,一共n行,每行k個整數,整數之間以一個空格分開。
分析:由定義可得:C[i][j] = A[i][0]*B[0][j] + A[i][1]*B[1][j] + …… +A[i][m-1]*B[m-1][j](C[i][j],因此每次計算C[i][j]時可以列舉k=0~m-1,計算的和。

樣例輸入

2 3 2
1 2 3
2 1 4
1 2
2 1
3 2

樣例輸出

14 10
16 13

資料範圍限制

C++程式碼

#include <iostream>
#include <cassert>

using namespace std;

int main()
{
    const int N = 100;
    const int M = 100;
    const int K = 100;

    int MatrixA[N][M];
    int MatrixB[M][K];
    int MatrixC[
N][K]; int n, m, k; cin >> n >> m >> k; assert(n>=1 && n<N); assert(m>=1 && m<M); assert(k>=1 && k<K); // input Matrix A for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { cin >>
MatrixA[i-1][j-1]; } } // input Matrix B for(int i=1; i<=m; i++) { for(int j=1; j<=k; j++) { cin >> MatrixB[i-1][j-1]; } } // calculate MatrixC = MatrixA * MatrixB for (int i=1; i<=n; i++) { for(int j=1; j<=k; j++) { MatrixC[i-1][j-1] = 0; for (int c=1; c<=m; c++) { MatrixC[i-1][j-1] += MatrixA[i-1][c-1]*MatrixB[c-1][j-1]; } } } // output Matrix C for (int i=1; i<=n; i++) { for(int j=1; j<=k; j++) { cout << MatrixC[i-1][j-1] << " "; } cout << endl; } return 0; }