问题描述
给定一个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 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m,n;
m = sc.nextInt();
n = sc.nextInt();
int[][] arr = new int[m][m];
int[][] tmp = new int[m][m];
int[][] tmpt = new int[m][m];
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
arr[i][j] = sc.nextInt();
tmpt[i][j] = arr[i][j];
tmp[i][j] = arr[i][j];
}
}
if(n==0) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
if(i==j) {
System.out.print(1+ " ");
}else {
System.out.print(0+ " ");
}
}
System.out.println();
}
return ;
}
for (int ii = 1; ii < n; ii++) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
int a = 0;
for (int k = 0; k < m; k++) {
a += tmpt[j][k]*arr[k][i];
}
tmp[j][i] = a;
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
tmpt[i][j] = tmp[i][j];
}
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
System.out.print(tmp[i][j]+ " ");
}
System.out.println();
}
}
}