题解 | #矩阵乘法#
矩阵乘法
http://www.nowcoder.com/practice/ebe941260f8c4210aa8c17e99cbc663b
效率可能不高,但是思路比较清晰的一种 矩阵乘法 写法:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int x = in.nextInt();
int y = in.nextInt();
int z = in.nextInt();
int[][] matrix_A = new int[x][y];
int[][] matrix_B = new int[y][z];
//读取数据,建立二维数组(矩阵)
for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
matrix_A[i][j] = in.nextInt();
}
}
for(int i=0;i<y;i++){
for(int j=0;j<z;j++){
matrix_B[i][j] = in.nextInt();
}
}
int[][] result = matrix_multiply(matrix_A, matrix_B);
print_matrix(result);
}
}
//矩阵乘法
public static int[][] matrix_multiply(int [][] matrix_A, int[][] matrix_B){
int x = matrix_A.length;
int y = matrix_B.length;
int z = matrix_B[0].length;
int[][] result = new int[x][z];
for(int i=0;i<x;i++){
for(int j=0;j<z;j++){
//A的行* B的列
result[i][j] = determinant_multiply( get_row(matrix_A,i), get_column(matrix_B,j) );
}
}
return result;
}
//行列式乘法
public static int determinant_multiply(int[] a, int[] b){
if(a.length!=b.length){
System.out.println("a.length!=b.length :"+"a.length="+a.length+", b.length="+b.length);
return -1;
}
int result = 0;
for(int i=0;i<a.length;i++){
result += a[i]*b[i];
}
return result;
}
//得到矩阵的某一行
public static int[] get_row(int[][] matrix, int row_index){
return matrix[row_index];
}
//得到矩阵的某一列
public static int[] get_column(int[][] matrix, int column_index){
int y = matrix.length;
int[] result = new int[y];
for(int i=0;i<y;i++){
result[i] = matrix[i][column_index];
}
return result;
}
//打印矩阵
public static void print_matrix(int[][] matrix){
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix[0].length;j++){
System.out.print(matrix[i][j]+" ");
}
System.out.print("\n");
}
}
//打印行列式(在这题并没有调用,不过可以用来测试)
public static void print_determinant(int[] determinant){
for(int i=0;i<determinant.length;i++){
System.out.print(determinant[i]+" ");
}
System.out.print("\n");
}
} 