题目:
计算两个矩阵 A、B 的乘积矩阵 C。
矩阵 A={1,2,3,4,5,6};矩阵 B={7,8,9,10,11,12}。
两个矩阵的乘积仍然是矩阵。若 A 矩阵有m行p列,B 矩阵有p行n列,则它们的乘积 C 矩阵有m 行n 列。
C=A*B 的算法: Cij= (i=0,1,……,m-1;j=0,1,……,n-1)
设 A、B、C 矩阵用 3 个 2 维数组表示:a 数组有 3 行 2 列,b 数组有 2 行 3 列,则 c 数组有 3 行 3 列。
如:
c[0][0]= a[0][0]*b[0][0]+a[0][1]*b[1][0];
c[1][0]= a[1][0]*b[0][1]+a[1][1]*b[1][1];
public class ArrayMult {
public static void main(String[] args) {
int[][] a = {{1,2},{3,4},{5,6}};
int[][] b = {{1,2,3},{4,5,6}};
//m表示数组a的行数,n表示数组b的列数,s表示数组a的列数和数组b的行数
int m = a.length, n = b[0].length, s1 = a[0].length, s2 = b.length;
//判断两个数组是否能够相乘求积
if(s1 != s2) {
System.out.println("数组不能相乘,数组a的列数不等于数组b的行数");
return;
}
//动态创建数组c用来保存结果
int[][] c = new int[m][n];
for(int i=0; i<m; i++) //i表示数组c的每一行
for(int j=0; j<n; j++) { //j表示数组c的每一列
int temp = 0;
for(int k=0; k<s1; k++) //k表示数组a的列号和数组b的行号
temp+=a[i][k]*b[k][j];
c[i][j] = temp;
}
print(a);
print(b);
print(c);
}
private static void print(int[][] c) {
int m = c.length;
int n = c[0].length;
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
if(c[i][j]<10)
System.out.print(" ");
System.out.print(c[i][j] + " ");
}
System.out.println();
}
System.out.println("--------------------------------------");
}
}