华为OJ平台——矩阵乘法
Posted mukekeheart
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为OJ平台——矩阵乘法相关的知识,希望对你有一定的参考价值。
题目描述:
如果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键
最后一行的末尾不能换行
1 import java.util.Scanner; 2 3 /** 4 * 实现两个矩阵的乘法的功能,并输出结果 5 * 6 */ 7 public class MultipleMatrix { 8 9 public static void main(String[] args) { 10 /* 11 * 输入数据,按照输入的格式对应输入 12 * 1、第一个矩阵的行数 13 * 2、第一个矩阵的列数(也是第二个矩阵的行数) 14 * 3、第二个矩阵的列数 15 * 4、第一个矩阵的值 16 * 5、第二个矩阵的值 17 */ 18 Scanner cin = new Scanner(System.in) ; 19 int x = cin.nextInt() ; 20 int y = cin.nextInt() ; 21 int z = cin.nextInt() ; 22 //简单判断是否出错 23 if(x < 1 || y <1 || z < 1){ 24 cin.close() ; 25 return ; 26 } 27 28 int [][] fstMtr = new int [x][y] ; 29 int [][] sndMtr = new int [y][z] ; 30 //输入第一个矩阵A[x][y] 31 for(int i = 0 ; i < x ; i++){ 32 for(int j = 0 ; j < y ; j++){ 33 fstMtr[i][j] = cin.nextInt() ; 34 } 35 } 36 //输入第一个矩阵B[Y][Z] 37 for(int i = 0 ; i < y ; i++){ 38 for(int j = 0 ; j < z ; j++){ 39 sndMtr[i][j] = cin.nextInt() ; 40 } 41 } 42 cin.close() ; 43 44 int [][] result = new int[x][z] ; 45 //计算结果,按照矩阵相乘的公式进行计算 46 for(int i = 0 ; i < x ; i++){ 47 for(int j = 0 ; j < z ; j++){ 48 result[i][j] = 0 ; 49 for(int k = 0 ; k < y ; k++){ 50 result[i][j] += fstMtr[i][k]*sndMtr[k][j] ; 51 } 52 /* 53 * 输出结果,OJ平台中对输出的格式非常严格, 54 经过多次尝试,验证: 55 * 此题的正确输出格式应该是x行,z列的格式 56 * 一行中各列之间应用空格键隔开,不能用Tab键 57 * 最后一行的末尾不能换行 58 */ 59 if(j == z-1){ 60 if(i == x-1){ 61 System.out.print(result[i][j]); 62 }else{ 63 System.out.println(result[i][j]); 64 } 65 }else{ 66 System.out.print(result[i][j]+" "); 67 } 68 } 69 } 70 71 } 72 73 }
以上是关于华为OJ平台——矩阵乘法的主要内容,如果未能解决你的问题,请参考以下文章