一、题目描述
矩阵A是一个N行P列的矩阵, 矩阵B是一个P行M列的矩阵。根据线性代数中学过的矩阵相乘的原理,计算矩阵A和矩阵B相乘后得到的矩阵,并输出。
C++程序要求输入输出格式如下:
输入格式:
输入共一行,有三个整数N,P,M(N,P,M≤100)。表示矩阵A是一个N×P的矩阵,矩阵B是一个P×M的矩阵。
接下来N行,每行P个整数,读入矩阵A。
再接下来P行,每行M个整数,读入矩阵B。
数据保证在输入输出数据可以用int类型存储。
输出格式:
输出N行M列的矩阵C
输入输出样例如下:
输入: 2 3 4 输出:6 6 6 6
1 2 3 3 3 3 3
1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
二、思路
对于本题直接考虑暴力解,利用三层for循环计算两个矩阵中两两元素相乘的结果,累加后存入一个一维数组,输出时换行输出,即可打印出N行M列矩阵。
三、C++代码
#include<bits/stdc++.h>
using namespace std;
//矩阵乘法
int main(){
int N,P,M;
cin>>N>>P>>M;
int a_matrix[N][P];
int b_matrix[P][M];
int c_matrix[100*100];
for(int i=0;i<N;i++){ //输入矩阵A
for(int j=0;j<P;j++){
cin>>a_matrix[i][j];
}
}
for(int i=0;i<P;i++){ //输入矩阵B
for(int j=0;j<M;j++){
cin>>b_matrix[i][j];
}
}
int index=0;
for(int a=0;a<N;a++){ //a为A矩阵的行标
for(int b=0;b<M;b++){ //b为B矩阵的列标
for(int c=0;c<P;c++){ //c为B矩阵的行标、A矩阵的列标
c_matrix[index]+=a_matrix[a][c]*b_matrix[c][b];
}
index++;
}
}
for (int i = 1; i <= N * M; i++)//输出C矩阵
{
cout << c_matrix[i - 1] << ' ';
if (i % M == 0)//每输出一行,换行
{
cout << endl;
}
}
}