题目:
第一行输入给出两个数n,m,代表第一个矩阵的行数和列数。随后n行,每行给出m个数。
接下去一行给出两个数p,q,代表第二个矩阵的行数和列数。随后p行,每行给出q个数。
输出两个矩阵相乘后的结果。
案例:
输入:
2 2
1 2
1 -1
2 3
1 2 -3
-1 1 2
输出:
-1 4 1
2 1 -5
思路:
本题是单纯的矩阵相乘,用3个for循环解决,时间复杂度为n^3,细节见代码:
#include <bits/stdc++.h>
using namespace std;
const int ma = 1005;
int m1[ma][ma];
int m2[ma][ma];
int result[ma][ma];
int main() {
int n,m,p,q;//如果两矩阵可以相乘,那么m与p一定相等。
cin >> n >> m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
scanf("%d",&m1[i][j]);
cin >> p >> q;
for(int i=0;i<p;i++)
for(int j=0;j<q;j++)
scanf("%d",&m2[i][j]);
//矩阵m1上的每一行,都要与m2中的所有列乘一遍
for(int i=0;i<n;i++) {//遍历m1的行
for(int j=0;j<q;j++) {//遍历m2的列
for(int k=0;k<m;k++) {//根据定义,遍历m1行上的每一个数和m2列上的每一个数,分别相乘后计算总和
result[i][j] += m1[i][k] * m2[k][j];
}
}
}
for(int i=0;i<n;i++) {
for(int j=0;j<q;j++)
printf("%d ",result[i][j]);
printf("\n");
}
return 0;
}