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按钮: 一直往下面划:找到下面的这个 下面的这个…...
计算机导论
概述 计算机简史 1935年代,英国数学家图灵(Alan Turing)提出“图灵机”,奠定了计算机的理论基础。 1952年,冯诺依曼确定了计算机由运算器、控制器、存储器、输入、输出等5部分组成(Von Neumann 体系结构)。 60年代…...
力扣209-长度最小的子数组-滑动窗口思想
题目 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输入&am…...
Xilinx 7系列FPGA PCI Express IP核简介
前言:Xilinx7系列FPGA集成了新一代PCI Express集成块,支持8.0Gb/s数据速率的PCI Express 3.0。本文介绍了7系列FPGA PCIe Gen3的应用接口及一些特性。 1. PCI Express规范演进 PCIe是一种高速串行计算机扩展总线标准,旨在替代传统的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. 闭包 在函数内部定义的函数,可以访问改函数的属性和方法 私有属性 延长变量的生命周期,更好的避免命名冲突 缺点:内存消耗比较大,不建议频繁使用 2. js 原型 原型链 访问对像的属性方法,不光会在对象上查找还会在…...
Invalid bean definition with name ‘employeeMapper‘ defined in file
参考以下博客: <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.7</version> </dependency> 总结: 1. 拉取老项目的时候要特…...
悦享驾驶,乐在旅途,首选江铃集团新能源易至EV3青春版
金秋时节,天高气爽,正是出游的好时节。不论是家庭自驾游,还是朋友结伴出游,一款好看又好开的车绝对是提升旅行品质的重要因素。江铃集团新能源易至汽车EV3青春版,凭借其超高安全性、便捷操作性、卓越性能,成…...
测试WIFI和以太网的TCP带宽、UDP带宽和丢包率、延时
一、测试TCP、UDP的带宽 作为服务器:iperf3 -s -i 1 (或者用CloudCampus软件,或者iperf magic) Wi-Fi 发送、接收吞吐率的测试_magic iperf-CSDN博客 车机作为iperf3服务器,电脑作为iperf3得客户端,分别…...
redis 第155节答疑 源码分析Hash类型ziplist结构和zlentry实体解析
155属性 zlbytes zltail zllen entryX zlend 类型 uint32 t uint32 t uint16 t 列表节点 uint8 t 长度 4字节 4字节 2字节 不定 1字节 用途 记录整个压缩列表占用的内存字节数:在对压缩列表进行内存重分配,或者计算 zlend 的位置时使用 记录压缩列表表尾节点距离压缩…...
IDE使用技巧与插件推荐
集成开发环境(IDE)是开发者日常工作中的重要工具,合理使用IDE和合适的插件,能大大提高开发效率。本文将分享常见IDE(如VS Code、IntelliJ IDEA等)的一些高效使用技巧,以及开发过程中常用的插件推…...
1020接口测试面试题随记
1.测试中对于上下游承接的业务是怎么处理的 针对上下游承接的业务,我会采取以下措施进行处理:首先,明确上下游系统的接口和依赖关系,确保理解数据流和业务逻辑的连接点。其次,进行接口测试,验证上下游系统…...
Zotero7最新(2024)翻译问题——配置 百度API翻译
在使用翻译之前,首先要确保已经安装了插件:Translate for Zotero 关于插件的安装可以参考这篇文章: Zotero7最新(2024)安装、配置步骤-CSDN博客 接下来进入正题。 当使用Zotero7对英文文献翻译时,可能会…...
python程序设计员—练习笔记
目录 基础处理 字符串列表字典运算符正则表达式re库requestsBeautiful Soupjieba库分词模式基于TF-IDF算法的关键词提取 基于TextRank算法的关键词提取pandas 打开有多个表的.xlsx文件 基础处理 字符串 str_ str_.lower()lower()函数:将字符中的大写字母转换成小…...
1.DBeaver连接hive数据库
1.hive开启远程服务,linux中直接输入:hiveserver2 2.解压dbeaver和hive-jdbc-2.1.1.zip 3.双击打开 4.数据库,新建连接 5.搜索hive 6.配置参数 7.编辑驱动设置 8.添加jar包 9.测试连接 10.右击,新建sql编辑器 11.执行sql 12.调整字…...
CODESYS随机动态图案验证码制作详细案例(三)
#使用CODESYS软件模仿网页端动态图案验证码的制作详细案例# 前言: 通过上篇图案验证码的实际测试,我们已经完成了该案例的制作,但是在项目应用中,我们想对该功能直接调用,就需要将具有一定功能的程序代码或可视化进行封装成库文件。我们熟知,CODESYS有丰富的库文件,有…...
NodeJS 使用百度翻译API
在大数据处理中,经常需要大批量地翻译短小的文字,使用在线翻译平台的API 调用能够大幅度提高效率。 最近尝试了一下。 第一步在百度翻译开放平台注册 百度翻译开放平台 (baidu.com) 申请APPID 和SECRET加密码 源代码(mjs) …...
摩熵数科数据产品阵容BCPM
摩熵数科基本介绍 摩熵数科(成都)医药科技有限公司BCPMdata Pharma Technology (Chengdu)Co.,Ltd以“探索生命科学数据本源,构建全产业链数据应用生态”为愿景,致力于成为生命科学领域全球领先的数据系统与…...
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 :The parser for .idl ROS interfa…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
