算法训练 矩阵乘法

举报
陈言必行 发表于 2021/08/14 00:55:35 2021/08/14
【摘要】 问题描述 输入两个矩阵,分别是m*s,s*n大小。输出两个矩阵相乘的结果。 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200)。   接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。   接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。 输出格式 m行,每行n个空格隔开的整数,输出相乘後...

问题描述
输入两个矩阵,分别是m*s,s*n大小。输出两个矩阵相乘的结果。
输入格式
第一行,空格隔开的三个正整数m,s,n(均不超过200)。
  接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。
  接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。
输出格式
m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值。
样例输入
2 32
1 0 -1
1 1 -3
0 3
1 2
3 1
样例输出
-32
-8 2

提示
矩阵C应该是m行n列,其中C(i,j)等于矩阵A第i行行向量与矩阵B第j列列向量的内积。
例如样例中C(1,1)=(1,0,-1)*(0,1,3) = 1 * 0 +0*1+(-1)*3=-3


       
  1. import java.util.Scanner;
  2. public class Main {
  3. publicstatic void main(String[] args) {
  4. Scanner in = newScanner(System.in);
  5. int m =in.nextInt();
  6. int s =in.nextInt();
  7. int n =in.nextInt();
  8. int[][] M = newint[m][s];
  9. int[][] N = newint[s][n];
  10. for ( int i = 0 ; i < m ;i++){
  11. for ( int j = 0 ; j < s ; j++){
  12. M[i][j] =in.nextInt();
  13. }
  14. }
  15. for ( int i = 0 ; i < s ;i++){
  16. for ( int j = 0 ; j < n ; j++){
  17. N[i][j] =in.nextInt();
  18. }
  19. }
  20. int[][] C = newint[m][n];
  21. for ( int i = 0 ; i < m ;i++){
  22. for (int j = 0 ; j < s ; j++){
  23. for ( intk = 0 ; k < n ; k++){
  24. C[i][k] += M[i][j] *N[j][k];
  25. }
  26. }
  27. }
  28. for ( int i = 0 ; i < m ;i++){
  29. int cnt = 0;
  30. System.out.print(C[i][0]);
  31. for ( int j = 1 ; j < n ; j++){
  32. System.out.print(" "+C[i][j]);
  33. }
  34. if ( cnt != m-1){
  35. System.out.println();
  36. cnt++;
  37. }
  38. }
  39. }


文章来源: czhenya.blog.csdn.net,作者:陈言必行,版权归原作者所有,如需转载,请联系作者。

原文链接:czhenya.blog.csdn.net/article/details/76091964

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。