矩阵乘法

link:http://acm.hpu.edu.cn/vjudge/contest/view.action?cid=7#problem/B
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 

题解:公式程序化
AC代码:

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
long long a[200][200],b[200][200],c[200][200];
int main()
{
    int t,x,y,m,s,q,n,i,j;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&m,&s);
        for(i=0;i<m;i++)
            for(j=0;j<s;j++)
                scanf("%lld",&a[i][j]);
        scanf("%d%d",&q,&n);
        for(i=0;i<q;i++)
            for(j=0;j<n;j++)
                scanf("%lld",&b[i][j]);
        if(s==q)
        {
            printf("YES\n");
            for(i=0;i<m;i++)
                for(j=0;j<n;j++)
                {
                    c[i][j]=0;//注意要初始化 
                    for(x=0;x<s;x++)
                        c[i][j]+=a[i][x]*b[x][j];
                    printf("%d",c[i][j]);
                    if(j!=(n-1))
                        printf(" ");
                    else
                        printf("\n");
                }
        }
        else
        {
            printf("NO\n");
        }
    }
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三更鬼

谢谢老板!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值