Java机试题:矩阵乘法


描述

如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C。这个矩阵的每个元素是由下面的公式决定的
矩阵的大小不超过100*100

输入描述:

输入包含多组数据,每组数据包含:
第一行包含一个正整数x,代表第一个矩阵的行数
第二行包含一个正整数y,代表第一个矩阵的列数和第二个矩阵的行数
第三行包含一个正整数z,代表第二个矩阵的列数
之后x行,每行y个整数,代表第一个矩阵的值
之后y行,每行z个整数,代表第二个矩阵的值

输出描述:

对于每组输入数据,输出x行,每行z个整数,代表两个矩阵相乘的结果
import java.util.Arrays;
import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int row1 = -1;
        int col1row2 = -1;
        int col2 = -1;
        int[][] arr1;
        int[][] arr2;
        int[][] arr3;
        while (sc.hasNextInt()) {
            // 前三行为,行列信息
            for (int i = 1; i < 4; i++) {
                if(i % 3 == 1) {
                    row1 = sc.nextInt();
                }
                if(i % 3 == 2) {
                    col1row2 = sc.nextInt();
                }
                if(i % 3 == 0) {
                    col2 = sc.nextInt();
                }
            }
            // 根据行列信息构建矩阵
            arr1 = new int[row1][col1row2];
            for (int i = 0; i < row1 ; i++) {
                for (int j = 0; j < col1row2; j++) {
                    arr1[i][j] = sc.nextInt();
                }
            }
            arr2 = new int[col1row2][col2];
            for (int i = 0; i < col1row2 ; i++) {
                for (int j = 0; j < col2; j++) {
                    arr2[i][j] = sc.nextInt();
                }
            }
            // 计算结果矩阵:arr3[i][j] += arr1[i][k] * arr2[k][j];,k为arr1列数 = arr2行数
            arr3 = new int[row1][col2];
            for (int i = 0; i < row1 ; i++) {
                for (int j = 0; j < col2; j++) {
                    for (int k = 0; k < col1row2; k++) {
                        arr3[i][j] += arr1[i][k] * arr2[k][j];
                    }
                }
            }
            // 输出结果
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < row1 ; i++) {
                sb =  new StringBuffer("");
                for (int j = 0; j < col2; j++) {
                    sb.append(arr3[i][j] + " ");
                }
                System.out.println(sb);
            }
        }
    }
}

 题目来源:牛客网