题目描述
给定两个矩阵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;
}
该博客主要介绍了如何实现两个矩阵的乘法运算,包括输入格式、输出格式和计算过程。代码部分展示了C++实现矩阵乘法的细节,通过循环计算每个元素。同时,强调了矩阵乘法的条件:矩阵A的列数必须等于矩阵B的行数。如果尺寸不匹配,程序将输出错误信息。
3101

被折叠的 条评论
为什么被折叠?



