问题描述

  给定一个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();
		}
	}

}