问题 F: 矩阵乘法
题目描述
请你实现一个程序,用于求两个矩阵的乘积。
输入
包括一系列的测试用例,每个测试用例的第一行包含三个整数a,b,c,其中a是第一个矩阵的行数,b是第一个矩阵的列数并且是第二个矩阵的行数,c是第二个矩阵的列数,接下来是a行,每行包含b个整数,每个整数用空格隔开,用于表示第一个矩阵;然后是b行,每行包含c个整数,每个整数用空格隔开,用于表示第二个矩阵。
输出
对应每个测试用例,输出a行,每行包括c个整数,每个整数用空格隔开,用于表示两个矩阵乘积后的a行c列矩阵。
样例输入
2 3 4
1 2 3
4 5 6
1 2 3 4
5 6 7 8
9 10 11 12
样例输出
38 44 50 56
83 98 113 128
import java.util.Scanner;
public class F{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String first[];
int a,b,c;
while(in.hasNext()) //没说按0结束都要这样判断
{
first = (in.nextLine()).split(" ");
a = Integer.parseInt(first[0]);
b = Integer.parseInt(first[1]);
c = Integer.parseInt(first[2]);
//System.out.println(a+" "+b+" "+c);
String[][] arr1 = new String[a][b];
String[][] arr2 = new String[b][c];
for(int i=0;i<a;i++) //输入第一个矩阵a行b列
{
arr1[i]=(in.nextLine()).split(" ");
}
for(int j=0;j<b;j++) //输入第二个矩阵b行c列
{
arr2[j]=(in.nextLine()).split(" ");
}
int[][] arr3 = multiplyMatrix(arr1,arr2);
printMatrix(arr3);
}
}
private static int[][] multiplyMatrix(String[][] arr1, String[][] arr2)
{
if(arr1[0].length != arr2.length){
return null;
}
int[][] c=new int[arr1.length][arr2[0].length];
for(int i=0;i<arr1.length;i++) { //拿出arr1的每一行
for(int j=0;j<arr2[0].length;j++) { //拿出arr2的每一列
for(int k=0;k<arr1[0].length;k++) { //k表示arr1一行有多少个数
c[i][j] += Integer.parseInt(arr1[i][k]) * Integer.parseInt(arr2[k][j]); //一行乘以一列的和就是矩阵的一个值
}
}
}
return c;
}
private static void printMatrix(int[][] arr3) {
if(arr3!=null){
for(int i=0;i<arr3.length;i++){ //行号
for(int j=0;j<arr3[0].length;j++){ //列号
if(j!=arr3[0].length-1)
System.out.printf("%d ",arr3[i][j]);
else
System.out.printf("%d",arr3[i][j]);
}
System.out.println();
}
}
}
}