[蓝桥杯python] 矩阵乘法
问题描述
给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
例如:
A =
【1 2
3 4】
A的2次幂
【7 10
15 22】
1、资源限制
资源限制
时间限制:1.0s 内存限制:512.0MB
2、输入格式
第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数
接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值
3、输出格式
输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
4、样式输入及输出
样例输入
2 2
1 2
3 4
样例输出
7 10
15 22
5、代码及解析
具体解析请大家自己看一下代码中的备注,在此不多做解释。
mn = input().split()
N = int(mn[0])
M = int(mn[1])
#导入矩阵
rect = []
for x in range(0,N):
apend_rect = input().split()
rect.append(apend_rect)
#创造一个储存最终结果的矩阵rect_new
rect_new = [[ 0 for _ in range(0,N)] for _ in range(0,N)]
#创造一个中间过度作为输入的矩阵rect)mid
rect_mid = rect
#判断是否进行0次幂计算,如果是的话输出一个对角矩阵
if M == 0:
for i in range(0,N):
rect_new[i][i] = 1
result = ""
for j in range(0,N):
result += " " + str(rect_new[i][j])
print(result[1:])
else:
#如果只进行一次计算的话,输出它本身
if M == 1:
rect_new = rect
else:
for i in range(0,M-1):
#这里要注意每次要将rect_new清零不然会累加
rect_new = [[0 for _ in range(0, N)] for _ in range(0, N)]
a = 0
#a为行计算,b为列计算,用while就可以先把一行的所有的数计算出来
while a < N:
b = 0
while b < N:
for j in range(0,N):
rect_new[a][b] += int(rect_mid[a][j]) * int(rect[j][b])
b += 1
a += 1
#将计算的后的矩阵赋值给中间矩阵作为下一次的输入
rect_mid = rect_new
#输出
for i in range(0,N):
result = ""
for j in range(0,N):
result += " " + str(rect_new[i][j])
print(result[1:])
结果:
自己写的所以有点复杂,但是至少能完成嘿嘿。如果各位有优化欢迎评论区讨论!!