zoukankan      html  css  js  c++  java
  • 华为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
  • 相关阅读:
    HDOJ 2095 find your present (2)
    HDOJ 2186 悼念512汶川大地震遇难同胞——一定要记住我爱你
    九度 1337 寻找最长合法括号序列
    九度 1357 疯狂地Jobdu序列
    HDOJ 1280 前m大的数
    九度 1343 城际公路网
    九度 1347 孤岛连通工程
    HDOJ 2151 Worm
    九度 1342 寻找最长合法括号序列II
    九度 1346 会员积分排序
  • 原文地址:https://www.cnblogs.com/mukekeheart/p/5596873.html
Copyright © 2011-2022 走看看