1. 程式人生 > 其它 >L1-048 矩陣A乘以B (15 分)

L1-048 矩陣A乘以B (15 分)

技術標籤:CCCC刷題c++

L1-048 矩陣A乘以B (15 分)

題目

給定兩個矩陣AB,要求你計算它們的乘積矩陣A**B。需要注意的是,只有規模匹配的矩陣才可以相乘。即若AR**a行、C**a列,BR**b行、C**b列,則只有C**aR**b相等時,兩個矩陣才能相乘。

輸入格式:

輸入先後給出兩個矩陣AB。對於每個矩陣,首先在一行中給出其行數R和列數C,隨後R行,每行給出C個整數,以1個空格分隔,且行首尾沒有多餘的空格。輸入保證兩個矩陣的RC都是正數,並且所有整數的絕對值不超過100。

輸出格式:

若輸入的兩個矩陣的規模是匹配的,則按照輸入的格式輸出乘積矩陣A**B,否則輸出Error: Ca != Rb

,其中CaA的列數,RbB的行數。

輸入樣例1:

2 3
1 2 3
4 5 6
3 4
7 8 9 0
-1 -2 -3 -4
5 6 7 8

輸出樣例1:

2 4
20 22 24 16
53 58 63 28

輸入樣例2:

3 2
38 26
43 -5
0 17
3 2
-11 57
99 68
81 72

輸出樣例2:

Error: 2 != 3

思路

模板的矩陣乘法題,藉此題學了一下不靠板子寫矩陣(沒錯之前一直抄板子)。

沒有什麼坑點,還是很基礎的

程式碼

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define PI acos(-1)
using namespace std; typedef pair<int, int> P; typedef long long ll; const int N = 1e4 + 19; const ll mod = 1e9 + 7; int a[N][N], b[N][N]; int c[N][N]; int main() { int ra, ca, rb, cb; cin >> ra >> ca; for(int i = 0; i < ra; i++) { for(int j = 0; j < ca;
j++) { cin >> a[i][j]; } } cin >> rb >> cb; if(rb != ca) { cout << "Error: " << ca << " != " << rb << endl; return 0; } else { cout << ra << ' ' << cb << endl; } for(int i = 0; i < rb; i++) { for(int j = 0; j < cb; j++) { cin >> b[i][j]; } } for(int i = 0; i < ra; i++) { for(int j = 0; j < cb; j++) { for(int k = 0; k < ca; k++) { c[i][j] += a[i][k] * b[k][j]; } if(j == cb - 1) { cout << c[i][j]; } else { cout << c[i][j] << ' '; } } cout << endl; } return 0; }