给定一个 m 行、n 列的矩阵 A 和一个 n 行、m 列的矩阵 B。你需要用矩阵 A 与矩阵 B 相乘,并且将 m 行 m 列的乘积结果输出(点击这里 查看矩阵乘法具体介绍)。453612] 和矩阵 B=[425156]B = \begin{bmatrix} 4 & 2 \\ 5 & 1 \\ 5 & 6 \end{bmatrix}B=⎣⎡455216⎦⎤,他们的乘积会是 [36176028] \begin{bmatrix} 36 & 17 \\ 60 & 28\end{bmatrix}[36601728]。
输入格式
测评机会反复运行你写的程序。每次程序运行时,首先在第一行输入 222 个整数,分别对应题目描述中的 m 和 n(1≤m,n≤101),两个整数之间用一个空格分隔。
接下来 m 行,每行包含 n 个整数,每两个整数之间用一个空格分隔。对应 m 行 n 列的矩阵 A。
再接下来 n 行,每行包含 m 个整数,每两个整数之间用一个空格分隔。对应 n 行 m 列的矩阵 B。
注:矩阵中的整数均大于等于 −100-100−100,小于等于 100100100。
输出格式
输出包括 m 行,每行包含 m 个整数,对应矩阵 A 乘矩阵 B 的结果。
每两个整数之间一个空格,每行最后一个整数后面没有空格。
解法:
多层for循环嵌套, for(i for(j for(k) ) ),在结果矩阵result[][]中,result[i][j] += A[i][k] + B[k][j]
1 #include <iostream> 2 using namespace std; 3 4 int main() { 5 int m; 6 int n; 7 cin >> m >> n; 8 int a[m][n]; 9 int b[n][m]; 10 int result[m][m]; 11 for (int i = 0; i < m; i ++) { 12 for (int j = 0; j < n; j ++) { 13 cin >> a[i][j]; 14 } 15 } 16 for (int i = 0; i < n; i ++) { 17 for (int j = 0; j < m; j ++) { 18 cin >> b[i][j]; 19 } 20 } 21 for (int i = 0; i < m; ++i) { 22 for (int j = 0; j < m; ++j) { 23 result[i][j] = 0; 24 } 25 } 26 27 28 for (int i = 0; i < m; i ++) { 29 for (int j = 0; j < m; j ++) { 30 for (int k = 0; k < n; k++) { 31 result[i][j] += a[i][k] * b[k][j]; 32 } 33 } 34 } 35 for (int i = 0; i < m; i ++) { 36 for (int j = 0; j < m; j ++) { 37 if(j == 0) { 38 cout << result[i][j]; 39 } 40 else if(j == m - 1) { 41 cout << " " << result[i][j] << endl; 42 } 43 else { 44 cout << " " << result[i][j]; 45 } 46 } 47 } 48 return 0; 49 }
以上做法使用数组,下面的方法是使用vector:
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 int main() { 6 int m; 7 int n; 8 cin>>m>>n; 9 vector<vector<int>> matrix_a(m); 10 vector<vector<int>> matrix_b(n); 11 int input; 12 for (int i = 0; i < m; i++) { 13 for (int j = 0; j < n; j++) { 14 cin >> input; 15 matrix_a[i].push_back(input); 16 } 17 } 18 for (int i = 0; i < n; i++) { 19 for (int j = 0; j < m; j++) { 20 cin >> input; 21 matrix_b[i].push_back(input); 22 } 23 } 24 for (int i = 0; i < m; i++) { 25 for (int j = 0; j < m; j++) { 26 int s = 0; 27 for (int k = 0; k < n; k++) { 28 s += matrix_a[i][k] * matrix_b[k][j]; 29 } 30 if (j != 0) { 31 cout << " "; 32 } 33 cout << s; 34 } 35 cout << endl; 36 } 37 return 0; 38 }