当前位置: 首页 > news >正文

B2105 矩阵乘法

B2105 矩阵乘法

#include <iostream>
using namespace std;
int main(){int n,m,k;cin>>n>>m>>k;int arr1[n][m];int arr2[m][k];for(auto & line:arr1){for(auto & x: line){cin>>x;}}for(auto & line:arr2){for(auto & x: line){cin>>x;}}int arr3[n][k] = {};for(int i =0;i<n;i++){for(int j = 0;j < k; j++){for(int l =0;l<m;l++){arr3[i][j]+=  arr1[i][l] * arr2[l][j];}  }}// for(int i =0;i<n;i++){//   for(auto j =0;j<k;j++){//     cout<<arr3[i][j]<<" ";//   }//    cout<<endl;// }for(auto & lin :arr3){for(auto & x :lin){cout<<x<<" ";}cout<<endl;}}

在你当前的代码中,问题出在以下几个方面:

1. **`arr3` 初始化为 `{0}`**:你使用了 `int arr3[n][k] = {0};`,这在一些编译器中可能会导致问题。直接这样初始化并不适用于所有编译器,因此你可以使用一个普通的循环来初始化数组。
   
2. **输出的 `auto` 用法**:虽然你想简化输出使用 `for (auto & lin : arr3)`,但是当你使用了自定义大小的数组(如 `arr3[n][k]`),有时编译器无法正确推断类型,特别是编译器未能识别动态分配的多维数组。这里应使用传统的索引来进行输出。

3. **矩阵乘法逻辑是正确的**,所以核心问题集中在输入输出部分。

### 修正后的代码:

```cpp
#include <iostream>
using namespace std;

int main() {
    int n, m, k;
    cin >> n >> m >> k;

    // 定义矩阵
    int arr1[n][m];
    int arr2[m][k];
    int arr3[n][k];  // 结果矩阵

    // 输入第一个矩阵 arr1
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> arr1[i][j];
        }
    }

    // 输入第二个矩阵 arr2
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < k; j++) {
            cin >> arr2[i][j];
        }
    }

    // 初始化结果矩阵 arr3 为 0
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < k; j++) {
            arr3[i][j] = 0;
        }
    }

    // 矩阵乘法
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < k; j++) {
            for (int l = 0; l < m; l++) {
                arr3[i][j] += arr1[i][l] * arr2[l][j];
            }
        }
    }

    // 输出结果矩阵
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < k; j++) {
            cout << arr3[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}
```

### 解释:
1. **矩阵输入部分**:使用标准的 `for` 循环输入矩阵 `arr1` 和 `arr2`,这里你之前的代码逻辑是对的,保持不变。
2. **矩阵初始化**:将 `arr3` 初始化为 0。你之前使用了 `= {0}` 初始化可能导致问题,因此这里改用 `for` 循环手动将每个元素设置为 0。
3. **矩阵乘法**:逻辑正确,使用三重循环来计算矩阵的乘法。
4. **输出部分**:使用传统的 `for` 循环遍历并输出 `arr3`,避免使用 `auto` 来输出动态大小的二维数组,以确保兼容性。

### 输出部分的原因:
虽然 C++11 引入了 `auto` 来简化循环中的类型推断,但在涉及到动态大小的二维数组时,编译器有时可能无法推断类型,特别是在编译器的标准库实现不完全时。因此,使用传统的循环和显式索引是最兼容和清晰的方式。

### 示例输入:
```
2 3 2
1 2 3
4 5 6
7 8
9 10
11 12
```

### 输出:
```
58 64 
139 154

在 C++ 中,使用 `int arr3[n][k] = {};` 初始化数组会将数组中的所有元素设置为 0。这是一种简便的初始化方式,可以用于静态大小的数组。

### 为什么 `int arr3[n][k] = {};` 可以将数组的所有元素初始化为 0?
- 当你使用 `= {}` 初始化数组时,编译器会将数组的第一个元素初始化为 0,并且会自动将剩余的所有元素也初始化为 0。这是 C++ 标准中对于数组初始化的一个特点。
- 实际上,`int arr3[n][k] = {};` 是一个更通用的初始化方式,效果和 `= {0}` 是一样的,它会初始化数组中的所有元素为 0。

### 重要限制:
- **静态数组**:当数组大小是编译时常量时,比如 `int arr3[5][5] = {};`,这会被编译器正确地识别并将所有元素初始化为 0。
  
  ```cpp
  int arr3[5][5] = {};  // 可以正确初始化,所有元素设为 0
  ```

- **动态数组**:当数组大小由变量 `n` 和 `k` 决定时,比如 `int arr3[n][k] = {};`,它在部分编译器中可能不会工作。C++ 标准不支持动态大小的数组,因此这种初始化方式可能会在某些编译器中导致问题,特别是在使用动态内存管理的场合。

  在 C++11 及更高版本中,标准数组需要大小是编译时常量。如果你想处理动态大小的数组,你可以使用标准库中的 `std::vector` 或动态内存分配。

### 对于动态数组,如何初始化?
如果你使用的是动态大小的数组(例如大小由输入决定),你需要手动初始化数组。可以通过以下方法来初始化二维数组:

1. **使用 `std::vector`**:
   - `std::vector` 是一种动态数组,可以很好地处理动态大小的二维数组。

   ```cpp
   int n = 3, k = 3;
   vector<vector<int>> arr3(n, vector<int>(k, 0));  // 初始化为 0 的 n x k 矩阵
   ```

2. **手动初始化动态大小的数组**:
   - 如果你坚持使用原始的 C++ 数组,可以使用 `for` 循环手动初始化:

   ```cpp
   int n = 3, k = 3;
   int arr3[n][k];
   
   // 手动将所有元素初始化为 0
   for (int i = 0; i < n; i++) {
       for (int j = 0; j < k; j++) {
           arr3[i][j] = 0;
       }
   }
   ```

### 总结:
- `int arr3[n][k] = {};` 是可以初始化为 0 的一种方法,但它在动态数组情况下可能不会在所有编译器中工作。
- 如果你使用动态大小的数组,最好使用 `std::vector` 或手动初始化数组的元素。
 

相关文章:

B2105 矩阵乘法

B2105 矩阵乘法 #include <iostream> using namespace std; int main(){int n,m,k;cin>>n>>m>>k;int arr1[n][m];int arr2[m][k];for(auto & line:arr1){for(auto & x: line){cin>>x;}}for(auto & line:arr2){for(auto & x: lin…...

centos之下的mysql8的安装

文章目录 1.mysql.com进入(网址栏)2.xshell操作2.1拖拽上传2.2安装发布包2.3检查情况2.4安装mysql2.5手动启动2.6查看状态2.7查看随机密码2.8登录2.9重置密码 1.mysql.com进入(网址栏) 找下面的这个download按钮&#xff1a; 一直往下面划&#xff1a;找到下面的这个 下面的这个…...

计算机导论

概述 计算机简史 1935年代&#xff0c;英国数学家图灵(Alan Turing)提出“图灵机”&#xff0c;奠定了计算机的理论基础。 1952年&#xff0c;冯诺依曼确定了计算机由运算器、控制器、存储器、输入、输出等5部分组成&#xff08;Von Neumann 体系结构&#xff09;。 60年代…...

力扣209-长度最小的子数组-滑动窗口思想

题目 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 示例 1&#xff1a; 输入&am…...

Xilinx 7系列FPGA PCI Express IP核简介

前言&#xff1a;Xilinx7系列FPGA集成了新一代PCI Express集成块&#xff0c;支持8.0Gb/s数据速率的PCI Express 3.0。本文介绍了7系列FPGA PCIe Gen3的应用接口及一些特性。 1. PCI Express规范演进 PCIe是一种高速串行计算机扩展总线标准&#xff0c;旨在替代传统的PCI和AG…...

红包雨html

1、分享一个红包雨html代码。 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>红包雨小游戏</ti…...

js 基础补充3

1. 闭包 在函数内部定义的函数&#xff0c;可以访问改函数的属性和方法 私有属性 延长变量的生命周期&#xff0c;更好的避免命名冲突 缺点&#xff1a;内存消耗比较大&#xff0c;不建议频繁使用 2. js 原型 原型链 访问对像的属性方法&#xff0c;不光会在对象上查找还会在…...

Invalid bean definition with name ‘employeeMapper‘ defined in file

参考以下博客&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.7</version> </dependency> 总结&#xff1a; 1. 拉取老项目的时候要特…...

悦享驾驶,乐在旅途,首选江铃集团新能源易至EV3青春版

金秋时节&#xff0c;天高气爽&#xff0c;正是出游的好时节。不论是家庭自驾游&#xff0c;还是朋友结伴出游&#xff0c;一款好看又好开的车绝对是提升旅行品质的重要因素。江铃集团新能源易至汽车EV3青春版&#xff0c;凭借其超高安全性、便捷操作性、卓越性能&#xff0c;成…...

测试WIFI和以太网的TCP带宽、UDP带宽和丢包率、延时

一、测试TCP、UDP的带宽 作为服务器&#xff1a;iperf3 -s -i 1 &#xff08;或者用CloudCampus软件&#xff0c;或者iperf magic&#xff09; Wi-Fi 发送、接收吞吐率的测试_magic iperf-CSDN博客 车机作为iperf3服务器&#xff0c;电脑作为iperf3得客户端&#xff0c;分别…...

redis 第155节答疑 源码分析Hash类型ziplist结构和zlentry实体解析

155属性 zlbytes zltail zllen entryX zlend 类型 uint32 t uint32 t uint16 t 列表节点 uint8 t 长度 4字节 4字节 2字节 不定 1字节 用途 记录整个压缩列表占用的内存字节数:在对压缩列表进行内存重分配&#xff0c;或者计算 zlend 的位置时使用 记录压缩列表表尾节点距离压缩…...

IDE使用技巧与插件推荐

集成开发环境&#xff08;IDE&#xff09;是开发者日常工作中的重要工具&#xff0c;合理使用IDE和合适的插件&#xff0c;能大大提高开发效率。本文将分享常见IDE&#xff08;如VS Code、IntelliJ IDEA等&#xff09;的一些高效使用技巧&#xff0c;以及开发过程中常用的插件推…...

1020接口测试面试题随记

1.测试中对于上下游承接的业务是怎么处理的 针对上下游承接的业务&#xff0c;我会采取以下措施进行处理&#xff1a;首先&#xff0c;明确上下游系统的接口和依赖关系&#xff0c;确保理解数据流和业务逻辑的连接点。其次&#xff0c;进行接口测试&#xff0c;验证上下游系统…...

Zotero7最新(2024)翻译问题——配置 百度API翻译

在使用翻译之前&#xff0c;首先要确保已经安装了插件&#xff1a;Translate for Zotero 关于插件的安装可以参考这篇文章&#xff1a; Zotero7最新&#xff08;2024&#xff09;安装、配置步骤-CSDN博客 接下来进入正题。 当使用Zotero7对英文文献翻译时&#xff0c;可能会…...

python程序设计员—练习笔记

目录 基础处理 字符串列表字典运算符正则表达式re库requestsBeautiful Soupjieba库分词模式基于TF-IDF算法的关键词提取 基于TextRank算法的关键词提取pandas 打开有多个表的.xlsx文件 基础处理 字符串 str_ str_.lower()lower()函数&#xff1a;将字符中的大写字母转换成小…...

1.DBeaver连接hive数据库

1.hive开启远程服务&#xff0c;linux中直接输入&#xff1a;hiveserver2 2.解压dbeaver和hive-jdbc-2.1.1.zip 3.双击打开 4.数据库&#xff0c;新建连接 5.搜索hive 6.配置参数 7.编辑驱动设置 8.添加jar包 9.测试连接 10.右击&#xff0c;新建sql编辑器 11.执行sql 12.调整字…...

CODESYS随机动态图案验证码制作详细案例(三)

#使用CODESYS软件模仿网页端动态图案验证码的制作详细案例# 前言: 通过上篇图案验证码的实际测试,我们已经完成了该案例的制作,但是在项目应用中,我们想对该功能直接调用,就需要将具有一定功能的程序代码或可视化进行封装成库文件。我们熟知,CODESYS有丰富的库文件,有…...

NodeJS 使用百度翻译API

在大数据处理中&#xff0c;经常需要大批量地翻译短小的文字&#xff0c;使用在线翻译平台的API 调用能够大幅度提高效率。 最近尝试了一下。 第一步在百度翻译开放平台注册 百度翻译开放平台 (baidu.com) 申请APPID 和SECRET加密码 源代码&#xff08;mjs&#xff09; …...

摩熵数科数据产品阵容BCPM

摩熵数科基本介绍 摩熵数科&#xff08;成都&#xff09;医药科技有限公司BCPMdata Pharma Technology &#xff08;Chengdu&#xff09;Co.,Ltd以“探索生命科学数据本源&#xff0c;构建全产业链数据应用生态”为愿景&#xff0c;致力于成为生命科学领域全球领先的数据系统与…...

ros2 .idl文件生成C、C++代码

一、包目录结构 rosidl_generator_c 依赖rosidl_cmake、rosidl_typesupport_interface、ament_index_python、rosidl_parser rosidl_generator_cpp 依赖 rosidl_parser、rosidl_runtime_cpp、rosidl_generator_c rosidl_parser &#xff1a;The parser for .idl ROS interfa…...

JPlag代码抄袭检测工具:如何高效识别17种编程语言的代码抄袭行为

JPlag代码抄袭检测工具&#xff1a;如何高效识别17种编程语言的代码抄袭行为 【免费下载链接】JPlag State-of-the-Art Source Code Plagiarism & Collusion Detection. Check for plagiarism in a set of programs. 项目地址: https://gitcode.com/gh_mirrors/jp/JPlag …...

LeetCode 岛屿数量题解

LeetCode 岛屿数量题解 题目描述 给定一个二维网格地图 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;&#xff0c;计算岛屿的数量。 示例&#xff1a; 输入&#xff1a;grid [ ["1","1","1","1","0"], …...

Termius v7.0.1汉化踩坑实录:从修改entry.js到完美中文界面的完整流程

Termius v7.0.1深度汉化实战&#xff1a;从逆向分析到完美本地化的技术探索 Termius作为一款广受开发者喜爱的SSH客户端&#xff0c;其v7.0.1版本在功能和性能上都有显著提升。但对于中文用户而言&#xff0c;官方未提供完整的本地化支持始终是个遗憾。本文将带你深入Termius内…...

资本可以复制流量,却复制不了《凰标》的天命@凤凰标志

——《凰标》为何无法被批量复刻&#xff1f;一、资本逻辑&#xff1a;无限复制与批量复刻可复制元素资本操作手法结果爆款剧情换皮翻拍同质化内容泛滥流量模式买量算法短期数据狂欢国风外壳元素拼贴文化“快餐”营销套路热搜话题转瞬即逝的热度 资本的核心能力&#xff0c;是复…...

Android系统开发避坑:为什么你改了config.xml,导航栏还是不显示?

Android系统导航栏显示失效的深度排查指南 当你熬夜修改了config.xml文件&#xff0c;满怀期待地刷入系统&#xff0c;却发现导航栏依然不见踪影——这种挫败感我太熟悉了。导航栏显示问题看似简单&#xff0c;实则涉及Android资源覆盖机制的复杂层级。本文将带你深入AOSP的底层…...

如何高效使用炉石传说脚本:终极完整指南解决你的自动化难题

如何高效使用炉石传说脚本&#xff1a;终极完整指南解决你的自动化难题 【免费下载链接】Hearthstone-Script Hearthstone script&#xff08;炉石传说脚本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/he/Hearthstone-Script 你是否厌倦了炉石传说中重复性的…...

基于ConvLSTM与天气图的时空序列预测:新能源功率预测实战

1. 项目概述与核心价值最近几年&#xff0c;我身边不少做新能源电站运维和电力交易的朋友&#xff0c;都在为一个问题头疼&#xff1a;发电量预测不准。无论是光伏电站还是风电场&#xff0c;发电功率就像个“看天吃饭”的孩子&#xff0c;云层一遮&#xff0c;风速一变&#x…...

CES效用函数保姆级解析:从公式推导到Python代码实现(附替代弹性计算)

CES效用函数实战指南&#xff1a;从数学本质到Python可视化 在经济学建模和金融工程领域&#xff0c;CES&#xff08;Constant Elasticity of Substitution&#xff09;效用函数就像一把瑞士军刀——它不仅能描述消费者偏好&#xff0c;还能通过调整参数δ来模拟完全替代、Cobb…...

从DEM到glTF:打造跨平台三维地形模型的完整工作流

1. 为什么需要从DEM到glTF的三维地形工作流 三维地形模型在游戏开发、虚拟现实、城市规划等领域有着广泛应用。传统的工作流程往往存在平台兼容性差、数据转换复杂等问题。glTF作为"3D界的JPEG"&#xff0c;已经成为跨平台三维模型交换的事实标准。将数字高程模型&am…...

告别信号混乱!手把手教你正确处理Qt QLineEdit的编辑完成与回车事件

告别信号混乱&#xff01;手把手教你正确处理Qt QLineEdit的编辑完成与回车事件 在Qt开发中&#xff0c;QLineEdit作为最常用的输入控件之一&#xff0c;其信号处理看似简单却暗藏玄机。许多开发者都曾遇到过这样的困扰&#xff1a;明明只想在用户完成编辑时触发一次验证逻辑&a…...