题目描述

如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C。

输入包含多组数据,每组数据包含:
第一行包含一个正整数x,代表第一个矩阵的行数
第二行包含一个正整数y,代表第一个矩阵的列数和第二个矩阵的行数
第三行包含一个正整数z,代表第二个矩阵的列数
之后x行,每行y个整数,代表第一个矩阵的值
之后y行,每行z个整数,代表第二个矩阵的值

矩阵x的每行乘以y的每列的每个元素,求和。
简单的,主要注意一下计算的时候是三层循环。

#include<iostream>
#include<vector>
using namespace std;
int main(){
    int x_row,x_col,y_row,y_col;
    while(cin>>x_row>>x_col>>y_col){
        y_row=x_col;
        vector<vector<int>> x(x_row,vector<int>(x_col,0));
        for(int i=0;i<x_row;i++){//输入x数组
            for(int j=0;j<x_col;j++){
                cin>>x[i][j];
            }
        }
        vector<vector<int>> y(y_row,vector<int>(y_col,0));
        for(int i=0;i<y_row;i++){//输入y数组
            for(int j=0;j<y_col;j++){
                cin>>y[i][j];
            }
        }
        vector<vector<int>> ans(x_row,vector<int>(y_col,0));
        for(int i=0;i<x_row;i++){//表示x的每行
            for(int m=0;m<y_col;m++){//表示y的每列
                for(int j=0;j<x_col;j++){//表示x的每行的元素和y的每列的元素相乘后的总和
                    ans[i][m]+=x[i][j]*y[j][m];
                }
            }
        }
        for(int i=0;i<ans.size();i++){//输出结果
            for(int j=0;j<ans[0].size();j++){
                cout<<ans[i][j]<<' ';
            }
            cout<<endl;
        }

    }
}

简化一下,计算完的结果直接输出出来。

vector<vector<int>> ans(x_row,vector<int>(y_col,0));
        for(int i=0;i<x_row;i++){//表示x的每行
            for(int m=0;m<y_col;m++){//表示y的每列
                for(int j=0;j<x_col;j++){//表示x的每行的元素和y的每列的元素相乘后的总和
                    ans[i][m]+=x[i][j]*y[j][m];
                }
                cout<<ans[i][m]<<' ';
            }
            cout<<endl;
        }