题解 | #矩阵乘法#
矩阵乘法
https://www.nowcoder.com/practice/ebe941260f8c4210aa8c17e99cbc663b
#include <iostream> #include <vector> using namespace std; //矩阵乘法 class MatrixMulti { private: //A是个x行y列的矩阵,B是个y行z列的矩阵 int x, y, z; vector<vector<int>> A, B; public: //构造函数 MatrixMulti(const int x, const int y, const int z); //析构函数 ~MatrixMulti(); //矩阵A,B相乘 vector<vector<int>> multi(void)const; //<<重载(友元函数) friend ostream& operator<<(ostream& cout, vector<vector<int>>C); }; MatrixMulti::MatrixMulti(const int x, const int y, const int z) { this->A.clear(); this->B.clear(); this->x = x; this->y = y; this->z = z; vector<int>vi; int a; for (int i = 0; i < x; i++) { vi.clear(); for (int j = 0; j < y; j++) { cin >> a; vi.push_back(a); } this->A.push_back(vi); } for (int i = 0; i < y; i++) { vi.clear(); for (int j = 0; j < z; j++) { cin >> a; vi.push_back(a); } this->B.push_back(vi); } return; } MatrixMulti::~MatrixMulti() { } vector<vector<int>> MatrixMulti::multi(void) const { vector<vector<int>>C; vector<int>vi; int a; for (int i = 0; i < x; i++) { vi.clear(); for (int j = 0; j < z; j++) { a = 0; //计算a的值 for (int k = 0; k < y; k++) a += this->A[i][k] * this->B[k][j]; vi.push_back(a); } C.push_back(vi); } return C; } ostream& operator<<(ostream& cout, vector<vector<int>> C) { for (int i = 0; i < C.size(); i++) { cout << C[i][0]; for (int j = 1; j < C[1].size(); j++) cout << ' ' << C[i][j]; cout << endl; } // TODO: 在此处插入 return 语句 return cout; } int main() { int a, b, c; while (cin >> a >> b >> c) { // 注意 while 处理多个 case cout << MatrixMulti(a, b, c).multi() << endl; } } // 64 位输出请用 printf("%lld")