问题 A: 【例题1】矩阵A×B

时间限制: 1 Sec  内存限制: 128 MB
提交: 18  解决: 11
[提交][状态][讨论版][
命题人:quanxing][Edit] [TestData]

题目链接:http://acm.ocrosoft.com/problem.php?cid=1704&pid=0

题目描述

矩阵A规模是n×m,矩阵B规模是m×p,现在需要你求A*B

输入

输入n,m。然后输入n×m的矩阵。

输入p,然后输入m×p的矩阵。

1<=n,m,p<=100

-10000<=矩阵元素<=10000

输出

输出相乘后的n×p的矩阵

样例输入

2 3

1 2 3

3 2 1

2

1 1

2 2

3 3

样例输出

14 14

10 10

思路:模拟矩阵乘法就行了

代码:

#include<bits/stdc++.h>

using namespace std;

#define ll long long

struct MUL

{

    ll m[110][110];

}res;

MUL mul(MUL a, MUL b, int n, int m, int p, ll mod)//矩阵乘法,定义结构体函数,传入结构体,返回结构体,这样比较方便

{

    MUL tmp;

    for (int i = 1; i <= 100; i++)

    {

         for (int j = 1; j <= 100; j++)

         {

             tmp.m[i][j] = 0;

         }

    }

    for (int i = 1; i <= n; i++)

    {

         for (int j = 1; j <= p; j++)

         {

             for (int k = 1; k <= m; k++)

             {

                  tmp.m[i][j] = (tmp.m[i][j] + (a.m[i][k] % mod * b.m[k][j] % mod)) % mod;

             }

         }

    }

    return tmp;

}



int main()

{

    int n, m;

    cin >> n >> m;

    MUL aa, bb;

    for (int i = 1; i <= n; i++)

    {

         for (int j = 1; j <= m; j++)

         {

             cin >> aa.m[i][j];

         }

    }

    int p;

    cin >> p;

    for (int i = 1; i <= m; i++)

    {

         for (int j = 1; j <= p; j++)

         {

             cin >> bb.m[i][j];

         }

    }

    MUL result = mul(aa, bb, n, m, p, 10000000000);

    for (int i = 1; i <= n; i++)

    {

         for (int j = 1; j <= p; j++)

         {

             cout << result.m[i][j] << " ";

         }

         cout << endl;

    }

}