解题思路

  1. 首先读取输入:

    • 第一个矩阵的行数
    • 第一个矩阵的列数和第二个矩阵的行数
    • 第二个矩阵的列数
    • 然后分别读取两个矩阵的元素
  2. 进行矩阵乘法计算:

    • 结果矩阵的大小为
    • 对于结果矩阵中的每个元素 ,计算公式为:
  3. 输出结果矩阵

代码

while True:
    try:
        # 读取矩阵维度
        x = int(input())
        y = int(input())
        z = int(input())
        
        # 读取第一个矩阵
        matrix1 = []
        for _ in range(x):
            row = list(map(int, input().split()))
            matrix1.append(row)
            
        # 读取第二个矩阵
        matrix2 = []
        for _ in range(y):
            row = list(map(int, input().split()))
            matrix2.append(row)
            
        # 计算矩阵乘法
        result = [[0] * z for _ in range(x)]
        for i in range(x):
            for j in range(z):
                for k in range(y):
                    result[i][j] += matrix1[i][k] * matrix2[k][j]
        
        # 输出结果
        for row in result:
            print(' '.join(map(str, row)))
            
    except EOFError:
        break
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            // 读取矩阵维度
            int x = sc.nextInt();
            int y = sc.nextInt();
            int z = sc.nextInt();
            
            // 读取第一个矩阵
            int[][] matrix1 = new int[x][y];
            for (int i = 0; i < x; i++) {
                for (int j = 0; j < y; j++) {
                    matrix1[i][j] = sc.nextInt();
                }
            }
            
            // 读取第二个矩阵
            int[][] matrix2 = new int[y][z];
            for (int i = 0; i < y; i++) {
                for (int j = 0; j < z; j++) {
                    matrix2[i][j] = sc.nextInt();
                }
            }
            
            // 计算矩阵乘法
            int[][] result = new int[x][z];
            for (int i = 0; i < x; i++) {
                for (int j = 0; j < z; j++) {
                    for (int k = 0; k < y; k++) {
                        result[i][j] += matrix1[i][k] * matrix2[k][j];
                    }
                }
            }
            
            // 输出结果
            for (int i = 0; i < x; i++) {
                for (int j = 0; j < z; j++) {
                    System.out.print(result[i][j]);
                    if (j < z - 1) {
                        System.out.print(" ");
                    }
                }
                System.out.println();
            }
        }
    }
}
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int x, y, z;
    while (cin >> x >> y >> z) {
        // 读取第一个矩阵
        vector<vector<int>> matrix1(x, vector<int>(y));
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < y; j++) {
                cin >> matrix1[i][j];
            }
        }
        
        // 读取第二个矩阵
        vector<vector<int>> matrix2(y, vector<int>(z));
        for (int i = 0; i < y; i++) {
            for (int j = 0; j < z; j++) {
                cin >> matrix2[i][j];
            }
        }
        
        // 计算矩阵乘法
        vector<vector<int>> result(x, vector<int>(z, 0));
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < z; j++) {
                for (int k = 0; k < y; k++) {
                    result[i][j] += matrix1[i][k] * matrix2[k][j];
                }
            }
        }
        
        // 输出结果
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < z; j++) {
                cout << result[i][j];
                if (j < z - 1) cout << " ";
            }
            cout << endl;
        }
    }
    return 0;
}

算法及复杂度

  • 算法:矩阵乘法的基本实现
  • 时间复杂度: - 三重循环实现矩阵乘法
  • 空间复杂度: - 存储结果矩阵