ACM模版

描述

给出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;
}