CCF NOI1050. 矩阵乘法 (C++)

版权声明:代码属于原创,转载请联系作者并注明出处。 https://blog.csdn.net/weixin_43379056/article/details/84954088

1050. 矩阵乘法

题目描述

计算两个矩阵的乘法。nm阶的矩阵A乘以mk阶的矩阵B得到的矩阵C 是n*k阶的,且C[i][j] = A[i][0]*B[0][j] + A[i][1]*B[1][j] + …… +A[i][m-1]*B[m-1]j

输入

第一行为n, m, k,表示A矩阵是n行m列,B矩阵是m行k列,n, m, k均小于100;然后先后输入A和B两个矩阵,A矩阵n行m列,B矩阵m行k列,矩阵中每个元素的绝对值不会大于100。

输出

输出矩阵C,一共n行,每行k个整数,整数之间以一个空格分开。
分析:由定义可得:C[i][j] = A[i][0]*B[0][j] + A[i][1]*B[1][j] + …… +A[i][m-1]*B[m-1][j](C[i][j],因此每次计算C[i][j]时可以枚举k=0~m-1,计算的和。

样例输入

2 3 2
1 2 3
2 1 4
1 2
2 1
3 2

样例输出

14 10
16 13

数据范围限制

C++代码

#include <iostream>
#include <cassert>

using namespace std;

int main()
{
    const int N = 100;
    const int M = 100;
    const int K = 100;

    int MatrixA[N][M];
    int MatrixB[M][K];
    int MatrixC[N][K];

    int n, m, k;

    cin >> n >>  m >> k;

    assert(n>=1 && n<N);
    assert(m>=1 && m<M);
    assert(k>=1 && k<K);

    // input Matrix A
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            cin >> MatrixA[i-1][j-1];
        }
    }

    // input Matrix B
    for(int i=1; i<=m; i++)
    {
        for(int j=1; j<=k; j++)
        {
            cin >> MatrixB[i-1][j-1];
        }
    }

    // calculate MatrixC = MatrixA * MatrixB
    for (int i=1; i<=n; i++)
    {
        for(int j=1; j<=k; j++)
        {
            MatrixC[i-1][j-1] = 0;
            for (int c=1; c<=m; c++)
            {
                MatrixC[i-1][j-1] += MatrixA[i-1][c-1]*MatrixB[c-1][j-1];
            }
        }
    }

    // output Matrix C
    for (int i=1; i<=n; i++)
    {
        for(int j=1; j<=k; j++)
        {
            cout << MatrixC[i-1][j-1] << " ";
        }
        cout << endl;
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43379056/article/details/84954088