问题描述 输入两个矩阵,分别是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 }
解题思路:
矩阵相乘,遵循相乘后的矩阵点数据为,矩阵1的行向量与矩阵2的列向量的内积