• 华为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
  • 相关阅读:
    AMR转换MP3 linuxCentOS 版(不管任何语言可以使用shell命令在linux执行转换语句)
    MySql 入门——日期计算
    javascript深度剖析之 【 var 关键字】。
    javascript动画浅析。
    javascript之this关键字浅析。
    javascript【AMD模块加载器】浅析V3(添加CSS加载功能,重构内部流程)
    html5 canvas 自制小游戏系列之 【贪吃蛇】。
    javascript设计模式简单介绍之【工厂模式】
    javascript【AMD模块加载器】浅析
    javascript【AMD模块加载器】浅析V2(整合DOM ready)
  • 原文地址:https://www.cnblogs.com/mukekeheart/p/5596873.html
Copyright © 2020-2023  润新知