蓝桥杯练习系统矩阵乘法(Python)

问题描述

给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
  例如:
  A =
  1 2
  3 4
  A的2次幂
  7 10
  15 22

输入格式

第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数
  接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值

输出格式

输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开

样例输入

2 2
1 2
3 4

样例输出

7 10
15 22

算法思路

1.输入矩阵的阶次和幂次—转成整型
2.输入矩阵元素—for循环或者map函数映射
3.考虑特殊幂次情况:矩阵的0次幂是单位矩阵E;矩阵的一次幂输出原矩阵
4.定义矩阵平方函数,在for循环中调用该函数,循环次数为幂次-1
5.矩阵乘法的定义:AXB=C,Cij=A的第i行元素分别xB的第j列元素再求和

参考代码

n, m = list(map(int,input().split()))
matrix = [list(map(int,input().split())) for i in range(n)]
# 每执行一次multi函数,temp都会更新
def multi(n, mat1, mat2):
    out = []
    for i in range(n):
        result = []
        for j in range(n):
            result0 = 0
            for k in range(n):
                result0 += mat1[i][k] * mat2[k][j]
            result.append(result0)
        out.append(result)
    return out


# 定义矩阵平方函数再以(幂次数-1)为循环次数执行矩阵平方函数
# 任何非零数的零次幂都是1
# 矩阵的0次幂是单位正矩阵
if m == 0:
    # 这种写法下temp =[[0,0][0,0]]
    temp = [[0] * n for i in range(n)]
    # print(temp)
    for i in range(n):
        # for j in range(n):
        #     if i == j:
        temp[i][i] = 1
else:
    temp = matrix
    for i in range(m-1):
        temp = multi(n, temp, matrix)
for i in range(n):
    for j in range(n):
        print(temp[i][j], end=' ')
    print(' ')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值