1. 程式人生 > >[藍橋杯]ALGO-86.矩陣乘法

[藍橋杯]ALGO-86.矩陣乘法

 

問題描述
  輸入兩個矩陣,分別是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     for
(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 }
C解法

 

解題思路:

矩陣相乘,遵循相乘後的矩陣點資料為,矩陣1的行向量與矩陣2的列向量的內積