PAT 天梯赛 L1-048. 矩阵A乘以B 【数学】

题目链接

https://www.patest.cn/contests/gplt/L1-048

题意

给出两个矩阵,先判断两个矩阵能不能相乘,如果可以,就输出相乘 结果,如果不行 则按格式输出error

思路

先判断 第一个矩阵的列数 和第二个矩阵的行数 是否相等,如果相等就输出相乘结果,如果不相等 按格式输出ERROE

AC代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <cstdlib>
#include <ctype.h>
#include <numeric>
#include <sstream>
using namespace std;

typedef long long LL;
const double PI  = 3.14159265358979323846264338327;
const double E   = 2.718281828459;  
const double eps = 1e-6;
const int MAXN   = 0x3f3f3f3f;
const int MINN   = 0xc0c0c0c0;
const int maxn   = 1e2 + 5; 
const int MOD    = 1e9 + 7;
int a[maxn][maxn], b[maxn][maxn], c[maxn][maxn];

int main()
{
    int x1, y1;
    int x2, y2;
    cin >> x1 >> y1;
    int i, j, k;
    memset(a, 0, sizeof(a));
    memset(b, 0, sizeof(b));
    memset(c, 0, sizeof(c));
    for (i = 0; i < x1; i++)
    {
        for (j = 0; j < y1; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }
    cin >> x2 >> y2;
    for (i = 0; i < x2; i++)
    {
        for (j = 0; j < y2; j++)
        {
            scanf("%d", &b[i][j]);
        }
    }
    if (y1 != x2)
    {
        printf("Error: %d != %d\n", y1, x2);
    }
    else
    {
        printf("%d %d\n", x1, y2);
        int num = 0;
        for (i = 0; i < x1; i++)
        {
            for (j = 0; j < y2 ; j++)
            {
                if (j)
                    printf(" ");
                num = 0;
                for (k = 0; k < x2; k++)
                {
                    num += a[i][k] * b[k][j];
                }
                cout << num;
            }   
            cout << endl;
        }   
    }
}
posted @ 2018-03-08 10:41  Dup4  阅读(167)  评论(0编辑  收藏  举报