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

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

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


一、题目

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月前
|
安全 Cloud Native 虚拟化
VMware ESXi 7.0 U3v 下载 - 领先的裸机 Hypervisor
VMware ESXi 7.0 U3v 下载 - 领先的裸机 Hypervisor
782 0
|
6月前
|
移动开发 安全 虚拟化
VMware ESXi 9.0 下载 - 领先的裸机 Hypervisor
VMware ESXi 9.0 下载 - 领先的裸机 Hypervisor
1730 9
|
数据挖掘 数据处理
JSL语言 -小众语言
【10月更文挑战第10天】
1642 2
|
算法 机器人
秒合约期权机器人开发/秒合约系统/币币合约/技术开发应用
秒合约期权机器人开发/秒合约系统/币币合约/技术开发应用
|
存储 Python
在Python中,匿名函数(lambda表达式)是一种简洁的创建小型、一次性使用的函数的方式。
【6月更文挑战第24天】Python的匿名函数,即lambda表达式,用于创建一次性的小型函数,常作为高阶函数如`map()`, `filter()`, `reduce()`的参数。lambda表达式以`lambda`开头,后跟参数列表,冒号分隔参数和单行表达式体。例如,`lambda x, y: x + y`定义了一个求和函数。在调用时,它们与普通函数相同。例如,`map(lambda x: x ** 2, [1, 2, 3, 4, 5])`会返回一个列表,其中包含原列表元素的平方。
156 4
|
SQL 消息中间件 Java
Flink问题之从SavePoint启动任务修改的代码不生效
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
505 2
Python随机波动性SV模型:贝叶斯推断马尔可夫链蒙特卡洛MCMC分析英镑/美元汇率时间序列数据|数据分享
Python随机波动性SV模型:贝叶斯推断马尔可夫链蒙特卡洛MCMC分析英镑/美元汇率时间序列数据|数据分享
|
存储 消息中间件 NoSQL
Redis相关命令详解及其原理
Redis相关命令详解及其原理
178 0
【鸿蒙 HarmonyOS】UI 布局 ( 帧布局 StackLayout )
【鸿蒙 HarmonyOS】UI 布局 ( 帧布局 StackLayout )
280 0
【鸿蒙 HarmonyOS】UI 布局 ( 帧布局 StackLayout )
|
人工智能 云计算
AI Earth作为一个基于AI与云计算的地球科学计算平台
AI Earth作为一个基于AI与云计算的地球科学计算平台【1月更文挑战第16天】【1月更文挑战第77篇】
319 3
下一篇
开通oss服务