题目描述
给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若A有Ra行、Ca列,B有Rb行、Cb列,则只有Ca与Rb相等时,两个矩阵才能相乘。
输入格式:
输入先后给出两个矩阵A和B。对于每个矩阵,首先在一行中给出其行数R和列数C,随后R行,每行给出C个整数,以1个空格分隔,且行首尾没有多余的空格。输入保证两个矩阵的R和C都是正数,并且所有整数的绝对值不超过100。
输出格式:
若输入的两个矩阵的规模是匹配的,则按照输入的格式输出乘积矩阵AB,否则输出
Error: Ca != Rb
,其中Ca
是A的列数,Rb
是B的行数。
思路
模拟矩阵运算 输出时注意格式
代码
#include <bits/stdc++.h>
#define PII pair<int, int>
typedef long long LL;
const int inf = 0x3f3f3f3f;
const int N = 500005;
using namespace std;
int ra, ca, rb, cb;
int a[505][505], b[505][505];
int cal(int i, int j, int k){
int ret = 0;
for(int c = 0; c < k; c++)
ret += a[i][c] * b[c][j];
return ret;
}
int main(){
cin >> ra >> ca;
//读入矩阵
for(int i = 0; i < ra; i++)
for(int j = 0; j < ca; j++)
cin >> a[i][j];
cin >> rb >> cb;
for(int i = 0; i < rb; i++)
for(int j = 0; j < cb; j++)
cin >> b[i][j];
if(ca != rb){
cout << "Error: " << ca << " != " << rb;
return 0;
}
cout << ra << " " << cb << endl;
for(int i = 0; i < ra; i++){
cout << cal(i, 0, ca);
for(int j = 1; j < cb; j++){
cout << " " << cal(i, j, ca);
}
if(i != ra - 1) cout << endl; //末尾无空行
}
return 0;
}