题解 | #矩阵乘法#

矩阵乘法

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");
    }

}
全部评论

相关推荐

05-23 20:31
已编辑
武汉大学 Java
内向的柠檬精在研究求职打法:注意把武大标粗标大 本地你俩不是乱杀
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务