矩阵乘法

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\n");
18         else
19         {
20             
21             printf("YES\n");
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?'\n':' ');
36             }
37         }
38                         
39     }            
40     return 0;
41 }

 

posted @ 2017-08-14 14:47  ⊙∽⊙Perseverance  阅读(338)  评论(0编辑  收藏  举报