题解 | #矩阵乘法#

矩阵乘法

https://www.nowcoder.com/practice/ebe941260f8c4210aa8c17e99cbc663b

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) {
        BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
        String a;
        int[][] matrix1, matrix2, matrix3;
        int i = 0, j, v, m, n, k;
        try {
            a = r.readLine();
            m = getDim(a);
            a = r.readLine();
            n = getDim(a);
            a = r.readLine();
            k = getDim(a);
            matrix1 = new int[m][n];
            matrix2 = new int[n][k];
            matrix3 = new int[m][k];
            while ((a = r.readLine()) != null && !a.isEmpty()) {
                if (i < m) matrixInit(a, matrix1[i++]);
                else matrixInit(a, matrix2[i++ - m]);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        i = 0;
        while (i < m) {
            j = 0;
            while (j < k) {
                v = 0;
                while (v < n) {
                    matrix3[i][j] += matrix1[i][v] * matrix2[v][j];
                    v++;
                }
                j++;
            }
            i++;
        }
        a = "";
        i = 0;
        while (i < m) {
            j = 0;
            while (j < k) {
                if (j == k - 1) a = a + matrix3[i][j] + "\n";
                else a = a + matrix3[i][j] + " ";
                j++;
            }
            i++;
        }
        System.out.print(a);
    }

    private static int getDim(String string) {
        char[] chs = string.toCharArray();
        int i = 0, l = chs.length, n = 0;
        while (i < l) {
            n *= 10;
            n += chs[i] - '0';
            i++;
        }
        return n;
    }

    private static void matrixInit(String a, int[] matrix) {
        char[] chs = a.toCharArray();
        int i = 0, j = 0, l = chs.length, n = 0;
        while (i < l) {
            if (chs[i] == ' ') {
                matrix[j++] = n;
                n = 0;
                i++;
                continue;
            }
            n *= 10;
            n += chs[i] - '0';
            if (i == l - 1) matrix[j] = n;
            i++;
        }
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务