HPU-1035-矩阵乘法

来源:互联网 发布:2003w0rd软件下载 编辑:程序博客网 时间:2024/06/10 11:32

点击打开链接


1035: 矩阵乘法 [矩阵]

时间限制: 1 Sec 内存限制: 128 MB

提交: 224 解决: 94 统计

题目描述

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

输入

第一行输入一个整数$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$。

输出

若矩阵$A、B$可以相乘,先输出$YES$,再输出相乘得到的矩阵。

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

反之输出$NO$。

样例输入

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

样例输出

YES2 2 22 2 2

NO

题解:本体没什么难度,但是对于C矩阵,每次用时都要初始化,不然很可能错

#include<stdio.h>#include<cstring> int main(){int T;scanf("%d",&T);while(T--){int n,m,x,y,a[200][200],b[200][200],c[200][200];memset(c,0,sizeof(c));//对C初始化scanf("%d%d",&n,&m);for(int i=0;i<n;i++)for(int j=0;j<m;j++)scanf("%d",&a[i][j]);scanf("%d%d",&x,&y);for(int i=0;i<x;i++)for(int j=0;j<y;j++)scanf("%d",&b[i][j]);if(m==x){printf("YES\n");for(int i=0;i<n;i++)for(int j=0;j<y;j++)for(int k=0;k<m;k++)c[i][j]+=a[i][k]*b[k][j];for(int i=0;i<n;i++)for(int j=0;j<y;j++)printf("%d%c",c[i][j],j==(y-1)?'\n':' ');}elseprintf("NO\n");}return 0;}



原创粉丝点击