题目描述:
如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C。
输入:
1、第一个矩阵的行数
2、第一个矩阵的列数(也是第二个矩阵的行数)
3、第二个矩阵的列数
4、第一个矩阵的值
5、第二个矩阵的值
输出:
输出两个矩阵相乘的结果
样例输入
2 2 2 3 8 8 0 9 0 18 9
样例输出
171 72
72 0
思路:
题目意思很简单,只是实现两个矩阵乘法功能,要注意的一点是输出的格式。
OJ平台中对输出的格式非常严格,经过多次尝试,验证此题的正确输出格式是:
输出应该是x行,z列的格式
每一行中各列之间应用空格键隔开,不能用Tab键
最后一行的末尾不能换行
import java.util.Scanner; /**
* 实现两个矩阵的乘法的功能,并输出结果
*
*/
public class MultipleMatrix { public static void main(String[] args) {
/*
* 输入数据,按照输入的格式对应输入
* 1、第一个矩阵的行数
* 2、第一个矩阵的列数(也是第二个矩阵的行数)
* 3、第二个矩阵的列数
* 4、第一个矩阵的值
* 5、第二个矩阵的值
*/
Scanner cin = new Scanner(System.in) ;
int x = cin.nextInt() ;
int y = cin.nextInt() ;
int z = cin.nextInt() ;
//简单判断是否出错
if(x < 1 || y <1 || z < 1){
cin.close() ;
return ;
} int [][] fstMtr = new int [x][y] ;
int [][] sndMtr = new int [y][z] ;
//输入第一个矩阵A[x][y]
for(int i = 0 ; i < x ; i++){
for(int j = 0 ; j < y ; j++){
fstMtr[i][j] = cin.nextInt() ;
}
}
//输入第一个矩阵B[Y][Z]
for(int i = 0 ; i < y ; i++){
for(int j = 0 ; j < z ; j++){
sndMtr[i][j] = cin.nextInt() ;
}
}
cin.close() ; int [][] result = new int[x][z] ;
//计算结果,按照矩阵相乘的公式进行计算
for(int i = 0 ; i < x ; i++){
for(int j = 0 ; j < z ; j++){
result[i][j] = 0 ;
for(int k = 0 ; k < y ; k++){
result[i][j] += fstMtr[i][k]*sndMtr[k][j] ;
}
/*
* 输出结果,OJ平台中对输出的格式非常严格,
经过多次尝试,验证:
* 此题的正确输出格式应该是x行,z列的格式
* 一行中各列之间应用空格键隔开,不能用Tab键
* 最后一行的末尾不能换行
*/
if(j == z-1){
if(i == x-1){
System.out.print(result[i][j]);
}else{
System.out.println(result[i][j]);
}
}else{
System.out.print(result[i][j]+" ");
}
}
} } }
Code