解题思路:矩阵乘法->以两个二阶矩阵举例,即第一个矩阵的第一行数据分别乘以对应的第二个矩阵的第一列数据,

                                以题目中的例子来说,即结果矩阵的(0,0)点的数值等于第一个矩阵(0,0)*第二个矩阵(0,0)+第一个矩阵(0,1)*第二个矩阵(1,0)=1*1+2*3=7

                                所以我的思路就放在如何将不同矩阵的行与列的数值之间在数组中的索引进行统一上

                                即一个索引值可以既表示第一个矩阵的第一行,同时也可以表示第二个矩阵的第一列:详见代码

注意事项:

参考代码:

n, m = map(int, input().strip().split())
matrix_row = []
matrix_column = []

for i in range(n):
    matrix_row.extend(list(map(int, input().strip().split())))  # 将矩阵以行为存储顺序

if m == 0: # 幂次数为0时为特殊矩阵,除对角线为1,其余位置均为0
    for a in range(n):
        for b in range(n):
            if a == b:
                print(1, end = " ")
            else:
                print(0, end = " ")
        print()
else:
    for p in range(n):
        for q in range(n):
            matrix_column.append(matrix_row[p + q * n])  # 此处为核心!!!将矩阵以列为存储顺序重排

    matrix_mul = matrix_row.copy()  # 存储当前矩阵值

    for a in range(m - 1):
        temp = []
        for r in range(n):
            for c in range(n):  # 注意!此处不能直接将得到的值立刻覆盖原矩阵值,否则下面代码会调用修改后的当前矩阵值,导致后续数据错误
                temp.append(sum(
                    list(map(lambda x, y: x * y, matrix_mul[r * n:(r + 1) * n], matrix_column[c * n:(c + 1) * n]))))
        matrix_mul = temp  # 每乘完完整的一个矩阵,就更新一次矩阵值
    for r in range(n):
        for c in range(n):
            print(matrix_mul[r * n + c], end = " ")
        print()


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

何梦吉他 2年前 回复TA
我擦 写这么复杂