矩阵乘法(C++)

2023-11-10

题目描述:

Alice在学线性代数。她觉得线代的计算特别麻烦,于是就来找你,希望你可以给她写一个程序计算两个矩阵的乘积。

矩阵乘法介绍: 矩阵A是一个N行P列的矩阵。 矩阵B是一个K行M列的矩阵。 当P=K时,A和B可以相乘(仅限于AB, BA不一定可行) 假设矩阵C=AB,那么C**i,j​=∑t=1P(或K)​A**i,t​∗B**t,j

举个例子,假设A是一个2×3的矩阵,B是一个3×2的矩阵,最终结果C是一个2×2的矩阵,如下图所示

输入格式:

输入共一行,有三个整数N,P,M(N,P,M≤100)。表示矩阵A是一个N×P的矩阵,矩阵B是一个P×M的矩阵。

接下来N行,每行P个整数,读入矩阵A。

再接下来P行,每行M个整数,读入矩阵B。

数据保证在输入输出数据可以用int类型存储。

输出格式:

输出N行M列的矩阵C。每行最后一个数后面有一个空格。

输入样例:

在这里给出一组输入。例如:

3 3 3
1 3 2
1 0 0
1 2 2
0 0 2
7 5 0
2 1 1

输出样例:

在这里给出相应的输出。例如:

25 17 4 
0 0 2 
18 12 4 

解题思路:

采用IPO思路实现功能:

题目大意:对于A矩阵的一行,去乘以B矩阵的每一列,分别做和,得到C矩阵的一行元素

结果是A矩阵与C矩阵行数相同,B矩阵与C矩阵列数相同

创建A、B、C三个二维数组,和一个num数组用来存储A、B的乘积

(1)I:

输入N,P,M三个整数

(2)P:

解题的关键在于理解行标和列标的循环关系,所以在这里先说明几个关系:

A矩阵每变化一行,B矩阵变化一周;

即A矩阵的行标变化一次,B矩阵的列标变化一周;

而B矩阵的列标每变化一次,行标需要变化一周;

又因为B矩阵的行标即为A矩阵的列标,故A矩阵的列标也需要变化一周;

至此,循环关系明确:

第一层:A矩阵行标

第二层:B矩阵列标

第三层:B矩阵行标和A矩阵列标,二者其实是一个标记物

第三层每轮循环结束,将结果存入num数组

(3)O:

逻辑上输出C矩阵即可;

代码实现如下

#include <iostream>
using namespace std;
​
int A_matrix[100][100] = { 0 };//A矩阵
int B_matrix[100][100] = { 0 };//B矩阵
int num_array[100 * 100] = { 0 };//存储第三层每一轮运算结果
​
int main()
{
    int N, P, M;
    cin >> N >> P >> M;//表示矩阵A是一个N×P的矩阵,矩阵B是一个P×M的矩阵,矩阵C是一个N×M的矩阵
    for (int i = 0; i < N; i++)//读入A矩阵
    {
        for (int j = 0; j < P; j++)
        {
            cin >> A_matrix[i][j];
        }
    }
    for (int i = 0; i < P; i++)//读入B矩阵
    {
        for (int j = 0; j < M; j++)
        {
            cin >> B_matrix[i][j];
        }
    }
    int index = 0;//num数组下标
    for (int a = 0; a < N; a++)//a为A矩阵的行标
    {
        for (int b = 0; b < M; b++)//b为B矩阵的列标
        {
            for (int c = 0; c < P; c++)//c为B矩阵的行标、A矩阵的列标
            {
                num_array[index] += A_matrix[a][c] * B_matrix[c][b];
            }
            index++;
        }
    }
    for (int i = 1; i <= N * M; i++)//输出C矩阵
    {
        cout << num_array[i - 1] << ' ';
        if (i % M == 0)//每输出一行,换行
        {
            cout << endl;
        }
    }
    return 0;
​
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

矩阵乘法(C++) 的相关文章

  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • 如何在 C# 中调整图像大小同时保持高质量?

    我从这里找到了一篇关于图像处理的文章 http www switchonthecode com tutorials csharp tutorial image editing saving cropping and resizing htt
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • 如何将 Roslyn 语义模型返回的类型符号名称与 Mono.Cecil 返回的类型符号名称相匹配?

    我有以下代码 var paramDeclType m semanticModel GetTypeInfo paramDecl Type Type Where paramDeclType ToString returns System Col
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub

随机推荐

  • 开发中遇到的线程不安全问题小结

    1 SimpleDateFormat 是线程不安全的 推荐使用如下 1 声明SimpleDateFormat变量时 加synchronized修饰 2 使用DateUtils 工具类 3 使用ThreadLocal 如下 private s
  • 设计一个学生类和它的一个子类——本科生类

    设计一个学生类 Student 和它的一个子类 本科生类 Undergraduate 要求如下 1 Student类有姓名 name 和年龄 age 属性 两者的访问权限为protected 一个包含两个参数的构造方法 用于给姓名和年龄属性
  • 微信小程序刷新前一界面数据和返回按钮监听

    在android中 为了实现从新页面往前一页面传值 使用startActivityForResult Intent intent int requestCode 打开新的activity 前一个activity通过onActivityRes
  • idea中安装leetcode插件后的cookie问题

    cookie配置 cookie失效操作相同 插件安装 cookie获取和配置 插件安装 参考 https blog csdn net m0 58275619 article details 120128587 安装插件后 idea中登录 可
  • 工厂模式有三个Level,你能用Go写到第几层?

    设计模式中的工厂模式是我们编写代码时常用的一种建造型模式 用于创建指定类的实例 在不使用设计模式的时候 我们是怎么创建类的实例的呢 别多想 这个问题没坑 就是我们写代码时直接用 new 关键字 直接创建实例 比如 Java 语言里是通过 n
  • Unet实现眼底图像血管分割(二)

    使用了google colaboratory的免费GPU进行训练 调整了源代码的各个参数 下面是configuration txt文件的解析 data paths 只有在修改了prepare datasets DRIVE py文件之后 才能
  • Axure教程 原型设计工具Axure RP新手入门教程(一):基础

    什么是Auxre RP Axure RP是一种线框图 原型设计 流程图和文档工具 使用Axure RP来创建和设置图表样式 为图表页面和元素添加交互性和注释 并将完成的设计发布到HTML以便通过Web浏览器查看 点击下方图片可观看视频 点击
  • 华为OD-货币单位换算-python版

    题目描述 记账本上记录了若干条多国货币金额 需要转换成人民币 fen 汇总后输出 每行记录一条金额 金额带有货币单位 格式为数字 单位 可能是单独的元 或者单独的分 或者分与元的组合 要求将这些货币全部换算成人民币 fen 后进行汇总 汇总
  • 统信uos操作系统虚拟机安装_【IT之家学院】统一操作系统 UOS 尝鲜记(一):下载&安装...

    近期风头正劲的统一操作系统UOS 由统信软件技术有限公司开发 该公司由国内多家长期从事操作系统研发的核心企业参与筹建 包括中国电子集团 CEC 武汉深之度科技有限公司 南京诚迈科技 中兴新支点 最新消息显示深度科技已成为统信软件全资子公司
  • Ribbon 负载均衡

    介绍 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具 Ribbon是Netflix发布的开源项目 主要功能是提供客户端的软件负载均衡算法和服务调用 Ribbon客户端组件提供一系列完善
  • react后台web端替换高德key之后报错10008

    web端高德地图添加key步骤 2021年12月02日升级之后新申请的key都有安全秘钥 10008的报错原因 https lbs amap com api javascript api guide abc prepare 解决方法 在 文
  • JavaScript(客户端脚本语言)

    js与html结合方式 ECMAScript规范 Function 代表函数 1 JavaScript发展史 1992年 nombas公司 C 最早的客户端脚本语言 专门用于表单验证 后更名为 scriptEarth 网景 scriptli
  • UnityWebRequest图片上传和下载

    上传 IEnumerator UpLoadTexture byte bytes WWWForm form new WWWForm string id Photo DateTime Now ToString yyyy MM dd hh mm
  • IntelliJ IDEA或goland没有 Go SDK选项 显示 no version

    1 首先 保证安装正常 环境变量正常配置 参考 Go语言环境安装及配置 ThrAvicii的博客 CSDN博客 go语言安装 2 在IDEA中安装Go语言支持插件 使用GOLand请忽略此步骤 3 重点 配置SDK 找不到 显示no ver
  • 2023美国大学生数学建模竞赛中文题目发布

    2023年美国大学生数学建模竞赛竞赛将于北京时间 2023年2月17日 早晨6 00点 至 北京时间 2023年2月21日 上午9 00 举行 赛题已发布 请同学们按照要求参赛 预祝同学们获得理想的成绩 Problem A Problem
  • Docker安装与简单操作

    文章目录 Docker安装 1 Docker离线安装 第一步 下载离线安装包 第二步 下载离线安装工具 第三步 将下载好的文件放在一个目录 如 第四步 在linux环境下 创建 docker文件夹 然后拷贝下载好的资源到此目录 如 第五步
  • 程序员由于天天和逻辑打交道,所以在世故的人眼里往往显得过于简单。

    程序员由于天天和逻辑打交道 所以在世故的人眼里往往显得过于简单 近来看组织行为学 发现其中一节列了很多特别的技能 考虑到也许他们对程序员群体很有启示意义 就追加了一点说明 把它放在博客里 相信这对想成为管理者的程序员是有意义的 我个人的观点
  • Go RSA的使用样例

    GenerateRSAKey 是生成公钥和密钥对 RSA Encrypt 是加密方法 RSA Decrypt 是解密方法 运行示例 代码 package main import crypto rand crypto rsa crypto x
  • R语言中将数据框(data.frame)中字符型数据转化为数值型

    as data frame lapply data as numeric
  • 矩阵乘法(C++)

    题目描述 Alice在学线性代数 她觉得线代的计算特别麻烦 于是就来找你 希望你可以给她写一个程序计算两个矩阵的乘积 矩阵乘法介绍 矩阵A是一个N行P列的矩阵 矩阵B是一个K行M列的矩阵 当P K时 A和B可以相乘 仅限于AB BA不一定可