描述
给出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
题解
矩阵乘法的核心是M_3[i][j] += M_1[i][k] * M_2[k][j];
。但是有一点需要注意的是要导入<cstring>
头文件,用Xcode编译时可以不加这个头文件,直接优化的就包含了,可是51Nod的提交环境无法识别,必须加上此头文件,当然,也可以加
<memory.h>
或<string.h>
替代此头文件,但是鉴于使用的是C++,所以还是加上<cstring>
头文件最好。
代码
#include <iostream>
#include <cstring>
using namespace std;
int M_1[105][105];
int M_2[105][105];
long long M_3[105][105];
int main(int argc, const char * argv[])
{
int N;
cin >> N;
memset(M_3, 0, sizeof(M_3));
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= N; j++)
{
cin >> M_1[i][j];
}
}
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= N; j++)
{
cin >> M_2[i][j];
}
}
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= N; j++)
{
for (int k = 1; k <= N; k++)
{
M_3[i][j] += M_1[i][k] * M_2[k][j];
}
}
}
for (int i = 1; i <= N; i++)
{
for (int j = 1; j < N; j++)
{
cout << M_3[i][j] << ' ';
}
cout << M_3[i][N] << '\n';
}
return 0;
}