d481 - 矩陣乘法
題目描述
題目要求實作矩陣乘法。給定兩個矩陣,如果它們可以相乘(第一個矩陣的列數等於第二個矩陣的行數),則計算它們的乘積並輸出結果。如果矩陣無法相乘,則輸出 "Error"。
解題思路
這題的解題思路是直接根據矩陣乘法的定義進行計算。對於結果矩陣中的每個元素,需要將第一個矩陣的對應行與第二個矩陣的對應列進行點積運算。在計算之前,需要檢查兩個矩陣是否可以相乘,即第一個矩陣的列數是否等於第二個矩陣的行數。如果無法相乘,則輸出 "Error"。
複雜度分析
- 時間複雜度: O(x * y * yy),其中 x 是第一個矩陣的行數,y 是第一個矩陣的列數,yy 是第二個矩陣的列數。這是因為對於結果矩陣中的每個元素,都需要進行 y 次乘法和加法運算。
- 空間複雜度: O(x * 101 + 101 * 101),主要來自於儲存兩個輸入矩陣 a 和 b 的空間。
程式碼
#include <iostream>
using namespace std;
long long int a[101][101],b[101][101];
int x,y,xx,yy;
int main() {
cin.tie(0);cin.sync_with_stdio(0);
while(cin >> x >> y >> xx >> yy){
if(y!=xx){
cout << "Error\n";
continue;
}
for(int i=0;i<x;++i){
for(int j=0;j<y;++j){
cin >> a[i][j];
}
}
for(int i=0;i<xx;++i){
for(int j=0;j<yy;++j){
cin >> b[i][j];
}
}
for(int i=0;i<x;++i){
for(int j=0;j<yy;++j){
long long int tmp=0;
for(int k=0;k<y;++k){
tmp+=a[i][k]*b[k][j];
}
cout << tmp << " ";
}
cout << '\n';
}
}
}