给出2个N * N的矩阵M1和M2,输出2个矩阵相乘后的结果。
Input
第1行:1个数N,表示矩阵的大小(2 <= N <= 100) 第2 - N + 1行,每行N个数,对应M1的1行(0 <= M1[i] <= 1000) 第N + 2 - 2N + 1行,每行N个数,对应M2的1行(0 <= M2[i] <= 1000)
Output
输出共N行,每行N个数,对应M1 * M2的结果的一行。
Input示例
2 1 0 0 1 0 1 1 0
Output示例
0 1 1 0
这个题目涉及到高数知识,知道公式以后代码实现起来其实并不困难,比如两个矩阵相乘,
结果矩阵的第一行第一个的值=其中一个矩阵的第一行的每个值x另一个矩阵的第一列的每个值,然后相加
结果矩阵的第一行第二个的值=其中一个矩阵的第一行的每个值x另一个矩阵的第二列的每个值,然后相加
唔,这样说初学者估计还是不明吧,干脆我来上个图吧:
这样应该很清楚了吧,清楚了我就上代码咯
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[1005][1005],b[1005][1005],m[1005][1005];
int main()
{
int i,j,k,n;
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&b[i][j]);
}
}
memset(m,0,sizeof(m));
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
m[i][j]+=a[i][k]*b[k][j];
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(j==0)
{
printf("%d",m[i][j]);
}
else
{
printf(" %d",m[i][j]);
}
}
printf("\n");
}
return 0;
}