矩阵的幂运算–蓝桥杯

  • Post author:
  • Post category:其他




试题 基础练习 矩阵乘法



题目


资源限制


时间限制: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();
		}	
	}
}



版权声明:本文为weixin_44783387原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。