矩阵的幂运算--蓝桥杯

试题 基础练习 矩阵乘法

题目

资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
  给定一个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

问题分析

这里我们需要注意,矩阵的幂可能为0,也就是说,我们需要考虑到输出01对角矩阵的情况。

解题思路

-》建立三个矩阵的二维数组,
-》如果幂为0,打印01对角矩阵
-》否则
-》》》循环
-》》》》》第一,二个矩阵相乘得第三个矩阵,而后将第三个矩阵赋值给第二个矩阵
-》》》打印输出第二个矩阵

Java实现代码

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int m = scanner.nextInt();
		int[][] arr1 = new int[n][n];
		int[][] arr2 = new int[n][n];
		int[][] arr3 = new int[n][n];
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				arr1[i][j] = scanner.nextInt();
				arr2[i][j] = arr1[i][j];
			}
		}
		scanner.close();
		
		if(m == 0) {
			for (int i = 0; i < n; i++) {
				for (int j = 0; j < n; j++) {
					if( i == j ) {
						System.out.print("1 ");
					}
					else {
						System.out.print("0 ");
					}
				}
				System.out.println();
			}
			return;
		}
		
		for (int h = 1; h < m; h++) {
			for (int i = 0; i < n; i++) {
				for (int j = 0; j < n; j++) {
					arr3[i][j] = 0;
					for (int k = 0,t=0; k < n && t<n; k++,t++) {
						arr3[i][j] += arr1[i][t] * arr2[k][j];  
					}
				}
			}
			for (int i = 0; i < n; i++) {
				for (int j = 0; j < n; j++) {
					arr2[i][j] = arr3[i][j];
				}
			}
		} 
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				System.out.print(arr2[i][j] + " ");
			}
			System.out.println();
		}	
	}
}

你可能感兴趣的:(算法,java)