【ShawnZhang】帶你看藍橋杯——演算法訓練 矩陣乘法
阿新 • • 發佈:2019-02-10
【ShancoLove】帶你看藍橋杯——演算法訓練 矩陣乘法
接下來m行,每行s個空格隔開的整數,表示矩陣A(i,j)。
接下來s行,每行n個空格隔開的整數,表示矩陣B(i,j)。 輸出格式 m行,每行n個空格隔開的整數,輸出相乘後的矩陣C(i,j)的值。 樣例輸入 2 3 2
1 0 -1
1 1 -3
0 3
1 2
3 1 樣例輸出 -3 2
-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
解題思路:輸入陣列計算都不是問題主要問題要弄清楚,矩陣的乘法之間如何通過演算法來表示出來
那就是三層迴圈,下方已用方框框出,已示重要,通過三層迴圈的巢狀,行乘以列的值,用p[i][k]*q[k][j]來完成矩陣的乘法。其餘就沒有什麼複雜的地方了。
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner in=new Scanner(System.in); int m=in.nextInt(); int s=in.nextInt(); int n=in.nextInt(); int[][] p=new int[m][s]; int[][] q=new int[s][n]; for(int i=0;i<m;i++){ for(int j=0;j<s;j++) p[i][j]=in.nextInt(); } for(int i=0;i<s;i++){ for(int j=0;j<n;j++) q[i][j]=in.nextInt(); } int[][] r=new int[m][n]; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ for(int k=0;k<s;k++) { /****************************************/ /**/r[i][j] += p[i][k]*q[k][j];/*********/ /****************************************/ } } } for(int i=0 ; i<m ; i++) { for(int j=0 ; j<n ; j++) { System.out.print(r[i][j] + " "); } } } }