問題描述
輸入兩個矩陣,分別是m*s,s*n大小。輸出兩個矩陣相乘的結果。
輸入格式
第一行,空格隔開的三個正整數m,s,n(均不超過200)。
接下來m行,每行s個空格隔開的整數,表示矩陣A(i,j)。
接下來s行,每行n個空格隔開的整數,表示矩陣B(i,j)。
接下來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
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
-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
編譯器很詭異。之前一直非滿分,因為數組規格太小,剛剛定義的m*s,s*n,m*n大小,題目要求:msn每個大小不超過200,索性直接將數組規模都改為了300——總之,規模要比預期的大一些才好。
1 #include<stdio.h> 2 int main(){ 3 int m,s,n; 4 /*輸入m,s,n*/ 5 scanf("%d%d%d",&m,&s,&n); 6 /*定義三個二維數組,並賦初值為0*/ 7 int A[300][300]={0},B[300][300]={0},C[300][300]={0}; 8 /*錄入A[m][s]*/ 9 for(int i=0;i<m;i++){ 10 for(int j=0;j<s;j++){ 11 scanf("%d",&A[i][j]); 12 } 13 } 14 /*錄入B[s][n]*/ 15 for(int i=0;i<s;i++){ 16 for(int j=0;j<n;j++){ 17 scanf("%d",&B[i][j]); 18 } 19 } 20 /*乘法計算,輸出結果*/ 21 for(int i=0;i<m;i++) 22 for(int j=0;j<n;j++) 23 for(int z=0;z<s;z++){ 24 C[i][j] += A[i][z]*B[z][j]; 25 } 26 for(int i=0;i<m;i++){ 27 for(int j=0;j<n;j++) 28 printf("%d ",C[i][j]); 29 printf("\n"); 30 } 31 }
