📌  相关文章
📜  国际空间研究组织 | ISRO CS 2015 |问题 37(1)

📅  最后修改于: 2023-12-03 14:50:47.280000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2015 | 问题 37

这是一道关于矩阵的编程题。

题目描述

给定两个矩阵 $A$ 和 $B$,它们的大小分别为 $m\times n$ 和 $n\times p$,请计算它们的乘积 $C=AB$。

输入格式

第一行包含三个整数 $m$、$n$ 和 $p$,表示两个矩阵的大小。

接下来 $m$ 行,每行包含 $n$ 个整数,表示矩阵 $A$。

接下来 $n$ 行,每行包含 $p$ 个整数,表示矩阵 $B$。

输出格式

输出 $m$ 行,每行包含 $p$ 个整数,表示 $C$ 的矩阵元素。

数据范围

$1\leq m,n,p\leq 100$

示例

输入:

3 2 3
1 2
3 4
5 6
1 2 3
4 5 6

输出:

9 12 15
19 26 33
29 40 51
算法

矩阵乘法是一种基本的数学运算,在计算机科学中有着广泛应用。它的计算公式如下:

$ C_{i,j}=\sum_{k=1}^n A_{i,k}B_{k,j} $

其中,$A$ 为一个大小为 $m\times n$ 的矩阵,$B$ 为一个大小为 $n\times p$ 的矩阵,$C$ 为一个大小为 $m\times p$ 的矩阵,$C_{i,j}$ 表示 $C$ 中第 $i$ 行第 $j$ 列的元素。

代码示例
# Python3 代码

m, n, p = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(m)]
B = [list(map(int, input().split())) for _ in range(n)]

C = [[0] * p for _ in range(m)]

for i in range(m):
    for j in range(p):
        for k in range(n):
            C[i][j] += A[i][k] * B[k][j]

for i in range(m):
    print(' '.join(str(x) for x in C[i]))
// C++ 代码

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::vector;

int main() {
    int m, n, p;
    cin >> m >> n >> p;

    vector<vector<int> > A(m, vector<int>(n));
    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < n; ++j) {
            cin >> A[i][j];
        }
    }

    vector<vector<int> > B(n, vector<int>(p));
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < p; ++j) {
            cin >> B[i][j];
        }
    }

    vector<vector<int> > C(m, vector<int>(p));
    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < p; ++j) {
            for (int k = 0; k < n; ++k) {
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }

    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < p; ++j) {
            cout << C[i][j] << " ";
        }
        cout << "\n";
    }

    return 0;
}

以上代码分别使用了 Python3 和 C++ 实现了矩阵乘法,读入数据并计算结果的部分都是相同的,只是细节实现有所不同。