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

时间: 2024-10-12 20:09:01

华为OJ平台——矩阵乘法的相关文章

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

题目描述: 连续输入字符串,请按长度为8拆分每个字符创 后输出到新的字符串数组: 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理 输入 连续输入字符串(输入两次,每个字符长长度小于100)输出 输出到长度为8,的新字符串数组样例输入 abc 123456789样例输出 abc00000 12345678 90000000 思路: 都是直接处理,没有具体的方法而言 注意点: 华为的OJ平台的输入输出有点坑,好多次的程序都在这里出问题,在Eclipse上运行的结果没问题,然后在OJ上就是编

华为机试-矩阵乘法

题目描述如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C.这个矩阵的每个元素是由下面的公式决定的: 原型:voidmatrix_multiply(int *m1,int *m2,int *r, int x, int y, int z);输入参数: int *m1:x行y列的矩阵(array1[x][y]) int *m2:y行z列的矩阵(array2[y][z]) int x:矩阵m1的行数 int y:矩阵m1的列数/矩阵m2的行数 int z:矩

华为OJ——蛇形矩阵

题目描述 题目说明 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形. 样例输入 5 样例输出 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 接口说明 原型 void GetResult(int Num, char * pResult); 输入参数: int Num:输入的正整数N 输出参数: int * pResult:指向存放蛇形矩阵的字符串指针 指针指向的内存区域保证有效 返回值: void 输入描述: 输入正整数N(N不大于100) 输出描述: 输出一个N

【华为OJ平台练习题】求最大公共子串的个数和元素

1.原题是求出最大公共子串的个数即可 原理:利用二维矩阵排列的方式,将俩字符串进行比较 #include <iostream> #include <vector> using namespace std; int prcs_2Strs(const char* s1,const char* s2) { int maxSameLength = 0; int L1 = strlen(s1); int L2 = strlen(s2); if(L1==0 || L2==0) //判断字符串是

华为OJ平台试题 —— 数组:字符串反转

字符串反转 代码: /* * 接受一个字符串,然后输出该字符串反转后的字符串. */ #include <stdio.h> #include <string.h> /* * 字符串反转函数 */ char *revstr(char *str, int len) { char *start = str; char *end = str + len - 1; char ch; if (str != NULL) { while (start < end) { ch = *start

华为OJ平台——查找组成一个偶数最接近的两个素数

1 import java.util.Scanner; 2 3 /** 4 * 问题描述:任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况, 5 * 本题目要求输出组成指定偶数的两个素数差值最小的素数对,其中 5 < n <= 10000 6 * eg:输入20,输出7 13 7 */ 8 public class PrimePair { 9 10 public static void main(String[] args) { 11 Scanner cin = ne

华为OJ平台——百钱买百鸡问题

题目描述: 元前五世纪,我国古代数学家张丘建在<算经>一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一. 百钱买百鸡,问鸡翁.鸡母.鸡雏各几何? 思路: 这道题很简单,假设鸡翁 i 只, 鸡母 j 只, 则有 i + j + k = 100 5*i + 3*j + k/3 = 100 由以上两个等式我们可以推出: j = 25 - i * 7/4 ; k = 75 + i * 3/4 ; 由于i. j. k 必须是0或正整数,所以 i 必须是4的倍数,因此我们下面的程序中也是

华为OJ平台——字符串通配符

题目描述: 在计算机中,通配符一种特殊语法,广泛应用于文件搜索.数据库.正则表达式等领域.现要求各位实现字符串通配符的算法.要求:实现如下2个通配符: *:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写.下同)(不包含. , 等特殊字符) ?:匹配1个字符 输入 通配符表达式: 一组字符串. 输出 返回匹配的结果,正确输出true,错误输出false 思路: 分三种情况: (1)无通配符的情况:对应的字符要完全相等,否则匹配失败,输出false (2)通配符为?的情况:对应的

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

题目描述: 请设计一个算法完成两个超长正整数的加法. 输入 输入两个字符串数字 输出 输出相加后的结果,string型 样例输入 99999999999999999999999999999999999999999999999999 1 样例输出 100000000000000000000000000000000000000000000000000 思路: 在Java中,这样的大数运算可以直接用BigInteger类中的方法来进行运算和处理,那样本题没有任何意义了 因此在本方法中,不直接采用该类中