问题描述:
代码实现:
#include <iostream>
using namespace std;
#include<vector>
void shuru(int hang,int lie,vector<vector<int>>&arr)
{
for(int i=0;i<hang;i++)
{
vector<int>arr_row;//一行
for(int j=0;j<lie;j++)
{
int temp;
cin>>temp;
arr_row.push_back(temp);
}
arr.push_back(arr_row);//把这一行添加到二维数组中
}
}
void shuchu(int hang,int lie,vector<vector<int>>&arr)
{
for(int i=0;i<hang;i++)
{
for(int j=0;j<lie;j++)
{
cout<<arr[i][j]<<" ";
}
cout<<endl;
}
}
void computer(vector<vector<int>>&arr_A,vector<vector<int>>&arr_B,vector<vector<int>>&arr_result,int result_hang,int result_lie,int B_hang)
{
for(int i=0;i<result_hang;i++)
{
vector<int>arr_row_result;//一行
for(int j=0;j<result_lie;j++)
{
int temp=0;
//获取arr_A的第i行数据
vector<int>arr_row_A=arr_A[i];
//获取arr_B的第j列数据
vector<int>arr_lie_B;
for(int i=0;i<B_hang;i++)
{
arr_lie_B.push_back(arr_B[i][j]);
}
//相乘
for(int i=0;i<arr_row_A.size();i++)
{
temp+=arr_row_A[i]*arr_lie_B[i];
}
arr_row_result.push_back(temp);
}
arr_result.push_back(arr_row_result);//把这一行添加到二维数组中
}
}
int main()
{
int n1,n2,n3;
cin>>n1>>n2>>n3;//(n1,n2)和(n2,n3)
vector<vector<int>>arr_A;
vector<vector<int>>arr_B;
shuru(n1,n2,arr_A);//数组A
shuru(n2,n3,arr_B);//数组B
//cout<<"输出:"<<endl;
//shuchu(n1,n2,arr_A);
//shuchu(n2,n3,arr_B);
// cout<<"计算:"<<endl;
vector<vector<int>>arr_result;
computer(arr_A,arr_B,arr_result,n1,n3,n2);
shuchu(n1,n3,arr_result);
}
效果展示:
思路解析:
首先是先将数组A和数组B输入,核心部分是计算矩阵相乘之后得到的result数组,核心的方法是先得到数组A的第i行,再得到数组B的第j列,然后将他们相乘,相乘得到的这个数放进result数组中。
(1)数组的输入
void shuru(int hang,int lie,vector<vector<int>>&arr)
{
for(int i=0;i<hang;i++)
{
vector<int>arr_row;//一行
for(int j=0;j<lie;j++)
{
int temp;
cin>>temp;
arr_row.push_back(temp);
}
arr.push_back(arr_row);//把这一行添加到二维数组中
}
}
(2)数组的输出
void shuchu(int hang,int lie,vector<vector<int>>&arr)
{
for(int i=0;i<hang;i++)
{
for(int j=0;j<lie;j++)
{
cout<<arr[i][j]<<" ";
}
cout<<endl;
}
}
(3)矩阵相乘
①获取数组A的第i行
//获取arr_A的第i行数据
vector<int>arr_row_A=arr_A[i];
②获取数组B的第j列
//获取arr_B的第j列数据
vector<int>arr_lie_B;
for(int i=0;i<B_hang;i++)
{
arr_lie_B.push_back(arr_B[i][j]);
}
③计算相乘结果temp
//相乘
for(int i=0;i<arr_row_A.size();i++)
{
temp+=arr_row_A[i]*arr_lie_B[i];
}
arr_row_result.push_back(temp);
好啦,希望能够帮助到大家!