矩阵乘法

给定一个 m 行、n 列的矩阵 A 和一个 n 行、m 列的矩阵 B。你需要用矩阵 A 与矩阵 B 相乘,并且将 m 行 m 列的乘积结果输出(点击这里 查看矩阵乘法具体介绍)。45​​36​​12​​] 和矩阵 B=[425156]B = \begin{bmatrix} 4 & 2 \\ 5 & 1 \\ 5 & 6 \end{bmatrix}B=​​455​​216​​​​,他们的乘积会是 [36176028] \begin{bmatrix} 36 & 17 \\ 60 & 28\end{bmatrix}[3660​​1728​​]。

输入格式

测评机会反复运行你写的程序。每次程序运行时,首先在第一行输入 222 个整数,分别对应题目描述中的 m 和 n(1≤m,n≤101),两个整数之间用一个空格分隔。

接下来 m 行,每行包含 n 个整数,每两个整数之间用一个空格分隔。对应 m 行 n 列的矩阵 A。

再接下来 n 行,每行包含 m 个整数,每两个整数之间用一个空格分隔。对应 nm 列的矩阵 B

注:矩阵中的整数均大于等于 −100-100100,小于等于 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 }

 

posted @ 2017-08-23 12:48  Xehanort_Hajime  阅读(209)  评论(0编辑  收藏  举报