版权声明:代码属于原创,转载请联系作者并注明出处。 https://blog.csdn.net/weixin_43379056/article/details/84954088
1050. 矩阵乘法
题目描述
计算两个矩阵的乘法。nm阶的矩阵A乘以mk阶的矩阵B得到的矩阵C 是n*k阶的,且C[i][j] = A[i][0]*B[0][j] + A[i][1]*B[1][j] + …… +A[i][m-1]*B[m-1]j。
输入
第一行为n, m, k,表示A矩阵是n行m列,B矩阵是m行k列,n, m, k均小于100;然后先后输入A和B两个矩阵,A矩阵n行m列,B矩阵m行k列,矩阵中每个元素的绝对值不会大于100。
输出
输出矩阵C,一共n行,每行k个整数,整数之间以一个空格分开。
分析:由定义可得:C[i][j] = A[i][0]*B[0][j] + A[i][1]*B[1][j] + …… +A[i][m-1]*B[m-1][j](C[i][j],因此每次计算C[i][j]时可以枚举k=0~m-1,计算的和。
样例输入
2 3 2
1 2 3
2 1 4
1 2
2 1
3 2
样例输出
14 10
16 13
数据范围限制
C++代码
#include <iostream>
#include <cassert>
using namespace std;
int main()
{
const int N = 100;
const int M = 100;
const int K = 100;
int MatrixA[N][M];
int MatrixB[M][K];
int MatrixC[N][K];
int n, m, k;
cin >> n >> m >> k;
assert(n>=1 && n<N);
assert(m>=1 && m<M);
assert(k>=1 && k<K);
// input Matrix A
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
cin >> MatrixA[i-1][j-1];
}
}
// input Matrix B
for(int i=1; i<=m; i++)
{
for(int j=1; j<=k; j++)
{
cin >> MatrixB[i-1][j-1];
}
}
// calculate MatrixC = MatrixA * MatrixB
for (int i=1; i<=n; i++)
{
for(int j=1; j<=k; j++)
{
MatrixC[i-1][j-1] = 0;
for (int c=1; c<=m; c++)
{
MatrixC[i-1][j-1] += MatrixA[i-1][c-1]*MatrixB[c-1][j-1];
}
}
}
// output Matrix C
for (int i=1; i<=n; i++)
{
for(int j=1; j<=k; j++)
{
cout << MatrixC[i-1][j-1] << " ";
}
cout << endl;
}
return 0;
}