华为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 }                
Code

 

以上是关于华为OJ平台——矩阵乘法的主要内容,如果未能解决你的问题,请参考以下文章

华为机试-矩阵乘法

矩阵乘法计算量估算, 华为笔试题

华为机试HJ70:矩阵乘法计算量估算

华为机试HJ69:矩阵乘法

华为OJ平台——字符串分隔

华为OJ平台——超长正整数相加