给定两个矩阵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的行数。 输入样例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给定两个矩阵,要求输出两个矩阵相乘后的结果。 首先需要明确运算规则: 一个a * b的矩阵m1和x * y的矩阵没m2相乘,只有 b 等于 x 时,才能进行运算,并且得到一个 a * y 的结果矩阵m3。 m1的第一行元素,分别和的m2第一列的元素 对应位置相乘后,所有得到的积的和就是m3的[1,1]位置的元素 m1的第一行元素,分别和的m2第二列的元素 对应位置相乘后,所有得到的积的和就是m3的[1,2]位置的元素 m1的第一行元素,分别和的m2第三列的元素 对应位置相乘后,所有得到的积的和就是m3的[1,3]位置的元素 ....#include <cstdio> using namespace std; int a, b, x, y; int main () { scanf("%d%d", &a, &b); int m1[a][b]; for (int i = 0; i < a; i++) { for (int j = 0; j < b; j++) { scanf("%d", &m1[i][j]); } } scanf("%d%d", &x, &y); int m2[x][y]; for (int i = 0; i < x; i++) { for (int j = 0; j < y; j++) { scanf("%d", &m2[i][j]); } } if (b != x) { printf("Error: %d != %d\n", b, x); return 0; } int m3[a][y]; for (int i = 0; i < a; i++) { for (int j = 0; j < y; j++) { int tSum = 0; for (int k = 0; k < b; k++) { tSum += m1[i][k] * m2[k][j]; } m3[i][j] = tSum; } } printf("%d %d\n", a, y); for (int i = 0; i < a; i++) { for (int j = 0; j < y; j++) { if (j != 0) printf(" "); printf("%d", m3[i][j]); } printf("\n"); } return 0; }
查看原文:http://iluhao.top/archives/667
L1-048. 矩阵A乘以B
最新推荐文章于 2023-07-08 18:11:06 发布