Link:點擊打開鏈接
Description
給定兩個矩陣AA和BB,你需要判斷它們是否可以相乘,若可以請輸出相乘後的矩陣。
Input
第一行輸入一個整數TT,代表有TT組測試數據。
每組數據第一行輸入兩個整數N,MN,M,代表矩陣AA的行、列。
接下來NN行,每行輸入MM個整數a[][]a[][]。
之後一行輸入兩個整數n,mn,m,代表矩陣BB的行、列。
接下來nn行,每行輸入mm個整數b[][]b[][]。
注:1<=T<=500,1<=N,m<=100,1<=M,n<=10,1<=1<=T<=500,1<=N,m<=100,1<=M,n<=10,1<=矩陣元素<=20<=20。
Output
若矩陣A、BA、B可以相乘,先輸出YESYES,再輸出相乘得到的矩陣。
對每行的矩陣元素,每兩個元素之間有一個空格,最後一個沒有空格。
反之輸出NONO。
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
思路:
當第一個矩陣的列數等於第二個矩陣的行數時,可以相乘
Code:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<queue>
#include<stack>
using namespace std;
int a[110][110],b[110][110],c[110][110];
int main()
{
int t,N,M,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&N,&M);
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++)
scanf("%d",&a[i][j]);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&b[i][j]);
if(M==n)
{
printf("YES\n");
for(int i=1;i<=N;i++)
for(int j=1;j<=m;j++)
{
c[i][j]=0; //每次都要初始化
for(int k=1;k<=M;k++)
c[i][j]+=a[i][k]*b[k][j];
printf("%d%c",c[i][j],j==m? '\n':' ');
}
}
else
printf("NO\n");
}
return 0;
}