题目链接:B2105 矩阵乘法 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
思路
模拟题!理清思路就可以作对!
PART1:大致规划(框架)
#include<bits/stdc++.h>
using namespace std;
int a[110][110],b[110][110],c[110][110];
int main()
{
//加快输出输入
std::ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int n,m,k;
cin>>n>>m>>k;
//输入n×m 阶的矩阵A
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
//输入m×k阶的矩阵B
for(int i=1;i<=m;i++)
{
for(int j=1;j<=k;j++)
{
cin>>b[i][j];
}
}
//算出n×k阶的矩阵C
//(此处会重点讲)
//输出n×k阶的矩阵C
for(int i=1;i<=n;i++)
{
for(int j=1;j<=k;j++)
{
cout<<c[i][j]<<" ";
}
cout<<'\n';// '\n'输出更快
}
return 0;
}
(注:没讲完)
PART2:如何算出n×k阶的矩阵C
这是原题要求:
C[i][j]=A[i][0]×B[0][j]+A[i][1]×B[1][j]+ …… +A[i][m−1]×B[m−1][j]
很晕🤯🤯🤯🤯🫤
但我们可以发现:A[i][?]×B[?][j]中,“?”是相同的
回题目一看:最大值为m-1
(从一输入就为m,我的代码就是这样的)
代码!!!!!
#include<bits/stdc++.h>
using namespace std;
int a[110][110],b[110][110],c[110][110];
int main()
{
//加快输出输入
std::ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int n,m,k;
cin>>n>>m>>k;
//输入n×m 阶的矩阵A
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
//输入m×k阶的矩阵B
for(int i=1;i<=m;i++)
{
for(int j=1;j<=k;j++)
{
cin>>b[i][j];
}
}
//算出n×k阶的矩阵C
for(int i=1;i<=n;i++)
{
for(int j=1;j<=k;j++)
{
//算出a[][],b[][]的坐标
for(int l=1;l<=m;l++)
{
c[i][j]+=a[i][l]*b[l][j];
}
}
}
//输出n×k阶的矩阵C
for(int i=1;i<=n;i++)
{
for(int j=1;j<=k;j++)
{
cout<<c[i][j]<<" ";
}
cout<<'\n';// '\n'输出更快
}
return 0;
}