Description
给定两个矩阵$A$和$B$,你需要判断它们是否可以相乘,若可以请输出相乘后的矩阵。
Input
第一行输入一个整数$T$,代表有$T$组测试数据。
每组数据第一行输入两个整数$N,M$,代表矩阵$A$的行、列。
接下来$N$行,每行输入$M$个整数$a[][]$。
之后一行输入两个整数$n,m$,代表矩阵$B$的行、列。
接下来$n$行,每行输入$m$个整数$b[][]$。
注:$1 <= T <= 500,1 <= N,m <= 100,1 <= M,n <= 10,1 <= $矩阵元素$<= 20$。
Output
若矩阵$A、B$可以相乘,先输出$YES$,再输出相乘得到的矩阵。
对每行的矩阵元素,每两个元素之间有一个空格,最后一个没有空格。
反之输出$NO$。
Sample Input
2 2 2 1 1 1 1 2 3 1 1 1 1 1 1 2 3 1 1 1 1 1 1 2 2 1 1 1 1
Sample Output
YES 2 2 2 2 2 2 NO
题解:矩阵能够相乘,必须满足左矩阵的列数等于右矩阵行数
代码:
1 #include<cstdio> 2 int a[1005][1005],b[1005][1005],c[1005][1005]; 3 int main() 4 { 5 int T,N,M,n,m; 6 scanf("%d",&T); 7 while(T--) 8 { 9 scanf("%d %d",&N,&M); 10 for(int i=0;i<N;i++) 11 for(int j=0;j<M;j++) 12 scanf("%d",&a[i][j]); 13 scanf("%d %d",&n,&m); 14 for(int i=0;i<n;i++) 15 for(int j=0;j<m;j++) 16 scanf("%d",&b[i][j]); 17 if(M!=n) printf("NO "); 18 else 19 { 20 21 printf("YES "); 22 for(int i=0;i<N;i++) //模板 23 { 24 for(int j=0;j<m;j++) 25 { 26 int sum=0; 27 for(int k=0;k<M;k++) 28 sum+=a[i][k]*b[k][j]; 29 c[i][j]=sum; 30 } 31 } 32 for(int i=0;i<N;i++) 33 { 34 for(int j=0;j<m;j++) 35 printf("%d%c",c[i][j],j==m-1?' ':' '); 36 } 37 } 38 39 } 40 return 0; 41 }