时间限制 内存限制
1000 ms 65536 KB

# 题目描述

小懒獭最近学习了矩阵乘法,她决定编写一个程序帮她求出两个矩阵的乘积。

已知两个矩阵 AABB 分别为 N×MN \times MM×PM \times P 的矩阵,小懒獭需要计算出它们的乘积矩阵 CC,其中 CC 是一个 N×PN \times P 的矩阵,满足:

C[i][j]=k=1MA[i][k]×B[k][j]C[i][j] = \sum_{k = 1}^M A[i][k] \times B[k][j]

# 输入格式

第一行包含三个正整数 NNMMPP,表示矩阵 AA 的行数、列数和矩阵 BB 的列数。

接下来 NN 行,每行包含 MM 个整数,表示矩阵 AA 的元素。

接下来 MM 行,每行包含 PP 个整数,表示矩阵 BB 的元素。

保证 1N,M,P1001 \le N, M, P \le 100,矩阵中元素的值在 [100,100][−100,100] 范围内。

# 输出格式

输出 NN 行,每行包含 PP 个整数,表示矩阵乘积的结果;相邻整数间用空格隔开

# 输入样例

2 3 2
1 2 3
4 5 6
7 8
9 10
11 12

# 输出样例

58 64
139 154

# 样例解释

根据输入数据,矩阵 AA 为:

[123456]\begin {bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end {bmatrix}

矩阵 BB 为:

[789101112]\begin {bmatrix} 7 & 8 \\ 9 & 10 \\ 11 & 12 \end {bmatrix}

矩阵乘积 CC 为:

[5864139154]\begin {bmatrix} 58 & 64 \\ 139 & 154 \end {bmatrix}

# 题解:矩阵乘法

矩阵乘法板子题,三重循环模拟即可。

参考代码:

#include <stdio.h>
int n, m, p, a[105][105], b[105][105];
int main()
{
    // freopen("D.in", "r", stdin);
    // freopen("D.out", "w", stdout);
    scanf("%d%d%d", &n, &m, &p);
    for (int i = 1; i <= n; ++ i)
        for (int j = 1; j <= m; ++ j)
            scanf("%d", &a[i][j]);
    
    for (int i = 1; i <= m; ++ i)
        for (int j = 1; j <= p; ++ j)
            scanf("%d", &b[i][j]);
    
    for (int i = 1; i <= n; ++ i)
    {
        for (int j = 1; j <= p; ++ j)
        {
            int res = 0;
            for (int k = 1; k <= m; ++ k)
                res += a[i][k] * b[k][j];
            
            printf("%d ", res);
        }
        puts("");
    }
    return 0;
}