题目描述
如果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; }