试题 基础练习 矩阵乘法
题目
资源限制
时间限制: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();
}
}
}