ディレクトリ
序文
私は最近インタビューを行っています。書かれたコードの多くは、ブログに投稿するのが面倒なので、現在は記入されていますが、コメントが少ない場合があります。ご不明な点がございましたら、お問い合わせください
試験問題の基本的な演習行列の乗算
リソース制限
時間制限:1.0秒メモリ制限: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各行行列Aの値を表す、絶対値が10以下の非負の整数
出力形式
は、AのM乗に対応する行列を表す、行あたりN個の整数で、合計N行を出力します。隣接する数字はスペースで区切られます
サンプル入力
2 2
1 2
3 4
出力例
7 10
15 22
この質問のコード
import java.util.Scanner;
public class MatrixMulti {
private static int N;//矩阵A的阶数
private static int[][] matrix; //矩阵A
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
int M = sc.nextInt(); //要求的幂数
matrix = new int[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
matrix[i][j] = sc.nextInt();
}
}
int[][] newMatrix = new int[N][N];
if (M == 0) {
for (int i = 0; i < N; i++) {
newMatrix[i][i] = 1;
}
} else {
newMatrix = matrix;
for (int i = 0; i < M - 1; i++) {
newMatrix = matriMultiplication(newMatrix);
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
System.out.print(newMatrix[i][j] + " ");
}
System.out.println();
}
}
private static int[][] matriMultiplication(int[][] matrixParam) {
int[][] newMatrix = new int[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
for (int k = 0; k < N; k++) {
newMatrix[i][k] += matrixParam[i][j] * matrix[j][k];
}
}
}
return newMatrix;
}
}