输入两个矩阵M1和M2,求M1和M2的和与积

  • Post author:
  • Post category:其他


题目描述

输入两个矩阵M1和M2,求M1和M2的和与积

输入

第一行输入整数m,代表两个方阵的大小,

接下来依次输入2*m行,每行包含m个整数。(第1-m行代表第一个方阵,第m+1 – 2*m行代表第二个方阵)

输出

数据不合法,输出“input error”

数据合法,这分别输出两个方阵的和与积(和方阵 与 积方阵 间隔空一行输出)

提示

矩阵加法规则:对应元素相加即可

矩阵乘法规则如下:

这样的描述过于抽象,我一开始无法理清算法思路,搜了很久看到了这篇博客




Java实现矩阵乘法及优化方法_GGG_Yu的博客-CSDN博客_java矩阵乘法



https://blog.csdn.net/GGG_Yu/article/details/109693318?ops_request_misc=&request_id=&biz_id=102&utm_term=java%E5%AE%9E%E7%8E%B0%E7%9F%A9%E9%98%B5%E7%9B%B8%E4%B9%98&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-9-109693318.142%5Ev5%5Epc_search_result_control_group,143%5Ev6%5Econtrol&spm=1018.2226.3001.4187


这样的图形解读帮助我更清晰地理解了矩阵乘法的算法,感谢 GGG_Yu

代码:

import java.util.*;
public class Main {
	public static void main(String[]args){
		try{
			Scanner reader = new Scanner(System.in);
			int m = reader.nextInt();
			int [][]a = new int[m][m];
			int [][]b = new int[m][m];
			//逐个输入矩阵M1
			for(int i=0;i<m;i++){
				for(int j=0;j<m;j++){
					a[i][j] = reader.nextInt();
				}
			}
			//逐个输入矩阵M2
			for(int i=0;i<m;i++){
				for(int j=0;j<m;j++){
					b[i][j] = reader.nextInt();
				}
			}
			//和方阵
			//矩阵加法:M1和M2对应元素相加
			int [][]he = new int[m][m];
			for(int i=0;i<m;i++){
				for(int j=0;j<m;j++){
					he[i][j] = a[i][j]+b[i][j];
					System.out.print(he[i][j]+" ");
				}
				System.out.println();
			}
			System.out.println();
			//积方阵
			//矩阵乘法:第一个矩阵的第m行和第二个矩阵的第n列的乘积 之和
			int [][]c = new int[m][m];//先定义出一个新的空数组,再把M1、M2按矩阵乘法得到积方阵的数
			for(int i=0;i<m;i++){
				for(int j=0;j<m;j++){
					for(int k=0;k<m;k++){
						c[i][j] += a[i][k]*b[k][j];
					}
				}
			}
			//逐个输出积方阵
			for(int i=0;i<m;i++){
				for(int j=0;j<m;j++){
					System.out.print(c[i][j]+" ");
				}
				System.out.println();
			}
		}
		catch(InputMismatchException e){
		     System.out.println("error input");
		}
	}
}



版权声明:本文为Beronhider原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。