题解 | #矩阵乘法#
矩阵乘法
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"); } }