解题思路
-
首先读取输入:
- 第一个矩阵的行数
- 第一个矩阵的列数和第二个矩阵的行数
- 第二个矩阵的列数
- 然后分别读取两个矩阵的元素
- 第一个矩阵的行数
-
进行矩阵乘法计算:
- 结果矩阵的大小为
- 对于结果矩阵中的每个元素
,计算公式为:
- 结果矩阵的大小为
-
输出结果矩阵
代码
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;
}
算法及复杂度
- 算法:矩阵乘法的基本实现
- 时间复杂度:
- 三重循环实现矩阵乘法
- 空间复杂度:
- 存储结果矩阵