L1-048 矩阵A乘以B(Python实现) 测试点全过

前言: {\color{Blue}前言:} 前言:本系列题使用的是“PTA中的团体程序设计天梯赛——练习集”的题库,难度有L1、L2、L3三个等级,分别对应团体程序设计天梯赛的三个难度,如有需要可以直接查看对应专栏。发布个人的刷题笔记的同时,也是希望可以帮助到有需要的人,我会尽量的解释每一步代码,如有错误或者可以优化的地方还望各位CSDN的朋友可以指出来。更新速度预计是每天不定时更新三道,若当天没有更新后期将会补上。

题目

给定两个矩阵 A A A B B B,要求你计算它们的乘积矩阵 A B AB AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若 A A A R a R_a Ra行、 C a C_a Ca 列, B B B R b R_b Rb行、 C b C_ b Cb列,则只有 C a C_a Ca R b R_b Rb相等时,两个矩阵才能相乘。

输入格式
输入先后给出两个矩阵 A A A B B B。对于每个矩阵,首先在一行中给出其行数 R R R和列数 C C C,随后 R R R行,每行给出 C C C个整数,以1个空格分隔,且行首尾没有多余的空格。输入保证两个矩阵的 R R R C C C都是正数,并且所有整数的绝对值不超过100。

输出格式:
若输入的两个矩阵的规模是匹配的,则按照输入的格式输出乘积矩阵 A B AB AB,否则输出Error: Ca != Rb,其中Ca A A A的列数,Rb B B B的行数。

输入样例1:

2 3
1 2 3
4 5 6
3 4
7 8 9 0
-1 -2 -3 -4
5 6 7 8

输出样例1:

2 4
20 22 24 16
53 58 63 28

输入样例2:

3 2
38 26
43 -5
0 17
3 2
-11 57
99 68
81 72

输出样例2:

Error: 2 != 3

题解

def multiply_matrices(A, B):
    # 获取矩阵 A 和 B 的行列数
    R_a, C_a = len(A), len(A[0])
    R_b, C_b = len(B), len(B[0])

    # 判断矩阵 A 和 B 是否可以相乘
    if C_a != R_b:
        return f"Error: {C_a} != {R_b}"

    # 初始化乘积矩阵 AB
    AB = [[0] * C_b for _ in range(R_a)]

    # 计算乘积矩阵 AB
    for i in range(R_a):
        for j in range(C_b):
            for k in range(C_a):
                AB[i][j] += A[i][k] * B[k][j]
    """
    通过三重循环遍历矩阵 A 和 B 的元素,计算乘积矩阵 AB 的每个元素。
    外层循环 for i in range(R_a): 遍历矩阵 A 的每一行。
    中层循环 for j in range(C_b): 遍历矩阵 B 的每一列。
    内层循环 for k in range(C_a): 遍历矩阵 A 的列和矩阵 B 的行,用于计算乘积。
    
    其中,A[i][k] 表示矩阵 A 的第 i 行第 k 列的元素,B[k][j] 表示矩阵 B 的第 k 行第 j 列的元素。
    乘积矩阵 AB 的第 i 行第 j 列的元素初始值为 0。在每次迭代中,
    将矩阵 A 的第 i 行第 k 列的元素与矩阵 B 的第 k 行第 j 列的元素相乘,然后累加到乘积矩阵 AB 的对应位置上。
    通过这三重循环的嵌套,对矩阵 A 和 B 的每个元素进行遍历和计算,最终得到完整的乘积矩阵 AB。"""

    return AB

# 读取矩阵 A 的行数和列数
R_a, C_a = map(int, input().split())

# 读取矩阵 A 的元素
A = []
for _ in range(R_a):
    row = list(map(int, input().split()))
    A.append(row)

# 读取矩阵 B 的行数和列数
R_b, C_b = map(int, input().split())

# 读取矩阵 B 的元素
B = []
for _ in range(R_b):
    row = list(map(int, input().split()))
    B.append(row)

# 计算乘积矩阵 AB
result = multiply_matrices(A, B)

# 输出结果
if isinstance(result, str):
    print(result)
else:
    R_ab, C_ab = len(result), len(result[0])
    print(f"{R_ab} {C_ab}")
    for row in result:
        print(" ".join(str(num) for num in row))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦生dwu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值