问题
问题描述
给定一个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
思路
- 调用一个求矩阵的方法
代码
import java.util.Scanner;
/**
* @description 矩阵乘法
* @author 小饼团子
* @date 2021年9月7日
*/
public class Demo21 {
private static int N; //矩阵的阶数
private static int[][] matrix; //N阶矩阵
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
int M = sc.nextInt(); //矩阵的幂
matrix = new int [N][N]; //需要求的新矩阵
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
matrix[i][j]=sc.nextInt();
}
}
int [][] newMatrix= new int[N][N];
if(M==0) {
for(int i=0;i<N;i++) {
newMatrix[i][i]=1;
}
}
else {
newMatrix=matrix;
for(int i=0;i<M-1;i++) {
newMatrix=matixMultiplation(newMatrix);
}
}
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
System.out.print(newMatrix[i][j]+" ");
}
System.out.println();//注意换行问题
}
}
public static int[][] matixMultiplation (int [][] matrixParm){
int [][] newMatrix = new int[N][N];
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
for(int k=0;k<N;k++) {
newMatrix[i][k]+=matrixParm[i][j]*matrix[j][k];
}
}
}
return newMatrix;
}
}
总结
- 注意幂为0时为单位矩阵
- 注意输出时换行问题
致读者
请特别注意,在蓝桥杯练习系统,Java的主类名必须是Main
菜鸟正在学习,慢慢进步,如有意见或建议,望大佬指正!欢迎评论留言