[藍橋杯]ALGO-86.矩陣乘法
阿新 • • 發佈:2018-12-23
問題描述 輸入兩個矩陣,分別是m*s,s*n大小。輸出兩個矩陣相乘的結果。 輸入格式 第一行,空格隔開的三個正整數m,s,n(均不超過200)。 接下來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
先上程式碼:
1 #include <stdio.h> 2 #include <string.h> 3 using namespace std; 4 5 int main(void) 6 { 7 int m,s,n; 8 scanf("%d%d%d",&m,&s,&n); 9 10 //矩陣A 11 int A[m][s]; 12 forC解法(int i=0; i<m; i++) 13 { 14 for (int j=0; j<s; j++) 15 { 16 scanf("%d",&A[i][j]); 17 } 18 } 19 20 //矩陣B 21 int B[s][n]; 22 for (int i=0; i<s; i++) 23 { 24 for (int j=0; j<n; j++) 25 { 26 scanf("%d",&B[i][j]); 27 } 28 } 29 30 //矩陣C 31 int C[m][n]; 32 memset(C,0,sizeof(C)); 33 for (int i=0; i<m; i++) 34 { 35 for (int j=0; j<n; j++) 36 { 37 for (int k=0; k<s; k++) 38 C[i][j] += (A[i][k]*B[k][j]); 39 } 40 } 41 42 //輸出 43 for (int i=0; i<m; i++) 44 { 45 for (int j=0; j<n; j++) 46 { 47 printf("%d ",C[i][j]); 48 } 49 printf("\n"); 50 } 51 52 return 0; 53 }
解題思路:
矩陣相乘,遵循相乘後的矩陣點資料為,矩陣1的行向量與矩陣2的列向量的內積