【数论】矩阵乘法(详解版)

简介: 【数论】矩阵乘法(详解版)

归根结底,一切都归结为矩阵乘法                                                                     ——科学谚语


一、题目

1.题面

image.gif 编辑

输入:

第一行两个数n,m;接下来n行m列描述一个矩阵A;接下来一行输入p;接下来m行p列描述一个矩阵B 。

输出:

输出矩阵A与矩阵B相乘所得的矩阵C。

样例输入

2 3

1 2 3

3 2 1

2

1 1

2 2

3 3

样例输出

14 14  

10 10

数据范围限制:

image.gif编辑

提示:

image.gif编辑

2.题目大意

如题面。。。

二、思路

1.输入

此题输入十分简单,看题面就知道了,但相对繁琐,需要细心、耐心。程序如下:

for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=p;j++)
    {
      int s=0;
      for(int k=1;k<=m;k++)
      {
        s=s+a[i][k]*b[k][j];
      }
      c[i][j]=s;
    }
  }

image.gif

2.主体程序

first.画图解困

根据题面,我们可以画出这样的一幅图(请放大查看)

image.gif编辑 

second.发现规律

我们可以发现,c[i][j]的数值是a数组的i行按照规则与b数组的j列相乘。

相乘规则:c[i][j]=a[i][k]*b[k][j]+a[i][k+1]*a[k+1][j]

third.代码实现

那么,只要用三重循环就可以了,前两重循环i和j,第三重循环k,结合公式进行就可以了!

代码如下:

for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=p;j++)
    {
      int s=0;
      for(int k=1;k<=m;k++)
      {
        s=s+a[i][k]*b[k][j];
      }
      c[i][j]=s;
    }
  }

image.gif

3.输出

输出一个数组c。

for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=p;j++)
    {
      cout<<c[i][j]<<" "; 
    }
    cout<<endl;
  }

image.gif

三、AC代码

#include<bits/stdc++.h>
using namespace std;
int a[105][105],b[105][105],c[105][105],n,m,p;
int main()
{
  cin>>n>>m;
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=m;j++)
    {
      cin>>a[i][j];
    }
  }
  cin>>p;
  for(int i=1;i<=m;i++)
  {
    for(int j=1;j<=p;j++)
    {
      cin>>b[i][j]; 
    }
  }
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=p;j++)
    {
      int s=0;
      for(int k=1;k<=m;k++)
      {
        s=s+a[i][k]*b[k][j];
      }
      c[i][j]=s;
    }
  }
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=p;j++)
    {
      cout<<c[i][j]<<" "; 
    }
    cout<<endl;
  }
}

image.gif


总结

这就是此题详解,欢迎关注!

相关文章
|
6月前
数论——高斯消元
数论——高斯消元
36 0
|
10月前
关于线性代数代数余子式的理解(余子式以及代数余子式求和)
关于线性代数代数余子式的理解(余子式以及代数余子式求和)
142 0
|
11月前
|
11月前
|
C语言
线性代数(三)行列式
线性代数(三)行列式
79 0
|
11月前
|
算法
线性代数(一)矩阵和方程组
线性代数(一)矩阵和方程组
127 0
|
11月前
|
算法
线性代数(二)矩阵代数
线性代数(二)矩阵代数
75 0
|
算法 C++
【基础算法】多项式三大运算 & C++实现
多项式三大运算 & C++实现
428 0
【基础算法】多项式三大运算 & C++实现