矩阵乘法

来源:互联网 发布:数据库概论第5版答案 编辑:程序博客网 时间:2024/06/06 05:24

矩阵乘法
Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu
Submit Status Practice HPU 1035

Description

给定两个矩阵AABB,你需要判断它们是否可以相乘,若可以请输出相乘后的矩阵。

Input

第一行输入一个整数TT,代表有TT组测试数据。

每组数据第一行输入两个整数N,MN,M,代表矩阵AA的行、列。

接下来NN行,每行输入MM个整数a[][]a[][]

之后一行输入两个整数n,mn,m,代表矩阵BB的行、列。

接下来nn行,每行输入mm个整数b[][]b[][]

注:1<=T<=5001<=N,m<=1001<=M,n<=101<=1<=T<=500,1<=N,m<=100,1<=M,n<=10,1<=矩阵元素<=20<=20

Output

若矩阵ABA、B可以相乘,先输出YESYES,再输出相乘得到的矩阵。

对每行的矩阵元素,每两个元素之间有一个空格,最后一个没有空格。

反之输出NONO

Sample Input

22 21 11 12 31 1 11 1 12 31 1 11 1 12 21 11 1 

Sample Output

YES2 2 22 2 2NO 

Hint

要掌握其写法



#include <iostream>#include <cstdio>int A[220][220],B[220][220],C[220][220];int main(){ int t; scanf("%d",&t); while(t--) {int n,s,m,w;scanf("%d %d",&n,&s);for(int i = 0; i < n; i++)   for(int j = 0;  j < s ; j++)       scanf("%d",&A[i][j]);       scanf("%d %d",&w , &m);       for(int p = 0; p < w; p++)            for(int q = 0; q < m; q++)                   scanf("%d",&B[p][q]);      if(s == w)    printf("YES\n"); else {  printf("NO\n");  continue; }               int i  , j ,k ;     for(i = 0; i < n; i++)  {               for(j = 0; j < m; j++)  {                  C[i][j] = 0;            }}           for(i = 0; i < n; i++)    {                for(k = 0; k < s; k++)  {                if(A[i][k] == 0)        continue;               for(j = 0; j < m; j++)     {               C[i][j] = (C[i][j] + A[i][k] * B[k][j]);        }    }}   for(int i = 0; i < n; i++)    for(int j = 0; j < m; j++)     {            if( j == m-1)          printf("%d\n",C[i][j]);          else           printf("%d ",C[i][j]);}}       return 0;}






原创粉丝点击