CCF NOI1050. 矩陣乘法 (C++)
阿新 • • 發佈:2018-12-12
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;
}