C++基础21 二维数组及相关问题详解

这是《C++算法宝典》C++基础篇的第21节文章啦~

如果你之前没有太多C++基础,请点击👉C++基础,如果你C++语法基础已经炉火纯青,则可以进阶算法👉专栏:算法知识和数据结构👉专栏:数据结构啦

目录

📕二维数组的概念

📕二维数组的定义

📕引用数组元素

📕注意事项

📕二维数组的输入

📕二维数组的输出

🧠二维数组输入输出

🧠二维数组输入输出参考代码

🧠注意事项

🧠找货物

🧠找货物参考代码

🧠有两列火车停反了位置该如何解决?


二维数组的概念

在上篇文章中我们提到,一维数组就像是一列火车。假设我们来到火车站,看见有很多辆长度一样的火车。为了区别这些火车,我们尝试分别命名为a1,a2,a3...那么a1[2]就可以用来表示第一辆火车2号车厢。

如果把火车当做一个元素,那么这些火车就会组成一个一维数组,而这个一维数组里面的每一个元素都是一个小的一维数组。这样就是二维数组,即一个数组需要使用两个数字来控制位置。

二维数组的定义

维数组就是用一个名字后面跟着两个数字,分别表示数组的行和列。二维数组就是一个矩阵——长方形方阵,有行有列。

定义:

数据类型  数组名[常量表达式1] [常量表达式2]

例如:int a[5][9]; //定义一个5行9列的二维整型数组a

引用数组元素

如果需要使用二维数组中的某个元素,就需要找到具体位置:

<数组名>[行下标][列下标]

如:a[1][2]

表示二维数组a中的第2行第3列元素。

 

注意事项

和一维数组一样,行下标和列下标都是从0开始编号的。

每个下标表达式取值不应超出下标所指定的范围。

例如,设有定义:int a[2][3];则表示a是2行3列的二维数组,共有2*3=6个元素,它们是:

a[0][0] a[0][1] a[0][2]

a[1][0] a[1][1] a[1][2]

因此可以看成一个矩阵(表格),a[1][2]即表示第2行第3列的元素,而a[2][3]就已经越界了。

二维数组的输入

int  a[10][10];  //定义一个10行10列的二维数组 a
for(i=1;i<=3;i++)  //控制行下标
{
    for(j=1;j<=4;j++)   //控制列下标
     cin>>a[i][j];
} 

二维数组的输出

for(i=1;i<=3;i++)             
{
    for(j=1;j<=4;j++)
    cout<<a[i][j]<<" ";  //每个元素之间用空格隔开
    cout<<endl;             //每一行输出结束之后需要手动换行
}    

二维数组输入输出

给定一个m行n列的二维数组,请原样输出这个二维数组(m和n范围为2-20)

【输入描述】

m+1行:

第一行:m和n,分别表示二维数组的行数和列数

接下来m行,每行n个数字,表示二维数组中每个元素

【输出描述】

m行,每行n个数字,二维数组原样输出

【输入样例】

2 3
1 3 4
2 6 8

【输出样例】

1 3 4
2 6 8

二维数组输入输出参考代码

#include<iostream>
using namespace std;
int a[22][22],m,n;
int main()
{
    cin>>m>>n;
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++)
         cin>>a[i][j];
    }
    for(int i=1;i<=m;i++){
     for(int j=1;j<=n;j++)
          cout<<a[i][j]<<" ";
          cout<<endl;
     }
    return 0;
}

注意事项

二维数组定义的时候尽量在主函数之外定义,因为一般情况下二维数组较大,占的空间较多。定义在主函数之外可以定义的比较大,且数组里面的所有元素都会默认赋值为0。(一维数组和变量也可以定义在主函数之外)。这样的定义叫做全局数组(变量)。

找货物

有m列火车,每列火车有n节车厢,车厢装有很多货物,需要对第x列火车第y节车厢进行抽查,请问这节车厢里有多少货物?(最多有20列火车,每列火车20节车厢)

【输入描述】

m+1行:

第一行:m,n,x,y,分别表示二维数组的行数、列数和要找的元素的所在行和列

接下来m行,每行n个数字,表示二维数组中每个元素

【输出描述】

一个数字,表示x行y列的元素

【输入样例】

3 4 2 2
1 2 3 4
4 5 6 7
7 8 9 10

【输出样例】

5

找货物参考代码

#include<iostream>
using namespace std;
int m,n,x,y,a[30][30];
int main()
{
    cin>>m>>n>>x>>y;
    for(int i=1;i<=m;i++)
        for(int j=1;j<=n;j++)
            cin>>a[i][j];
            cout<<a[x][y];
    return 0;
}

有两列火车停反了位置该如何解决?

for(i=1;i<=n;i++)     //对二维数组两行进行交换。
{
    t=a[x][i];
    a[x][i]=a[y][i]; //因为每行都有n个元素,所以一共需要交换n次。(循环n次)
    a[y][i]=t;
}

 从入门到算法,再到数据结构,查看全部文章请点击此处​​​​icon-default.png?t=N7T8http://www.bigbigli.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/774888.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

短视频父亲:成都柏煜文化传媒有限公司

短视频父亲&#xff1a;镜头背后的温情与力量 在这个信息爆炸的时代&#xff0c;短视频以其短小精悍、直观生动的特点&#xff0c;迅速占据了人们碎片化的时间&#xff0c;成为情感交流与文化传播的重要平台。而在这些纷繁复杂的短视频中&#xff0c;有一类内容尤为触动人心—…

如何让自动化测试更加灵活简洁?

简化的架构对于自动化测试和主代码一样重要。冗余和不灵活性可能会导致一些问题&#xff1a;比如 UI 中的任何更改都需要更新多个文件&#xff0c;测试可能在功能上相互重复&#xff0c;并且支持新功能可能会变成一项耗时且有挑战性的工作来适应现有测试。 页面对象模式如何理…

ELK日志系统和Filebeat采集器的学习总结

ELK是ElasticSerach、Logstash、Kina Logstash负责采集数据&#xff0c;Logstash有三个插件&#xff0c;input、filter、output&#xff0c;filter插件作用是对采集的数据进行处理&#xff0c;过滤的&#xff0c;因此filter插件可以选&#xff0c;可以不用配置。 ElasticSear…

ASUS/华硕枪神5 G533Q G733Q系列 原厂win10系统 工厂文件 带F12 ASUS Recovery恢复

华硕工厂文件恢复系统 &#xff0c;安装结束后带隐藏分区&#xff0c;一键恢复&#xff0c;以及机器所有驱动软件。 系统版本&#xff1a;Windows10 原厂系统下载网址&#xff1a;http://www.bioxt.cn 需准备一个20G以上u盘进行恢复 请注意&#xff1a;仅支持以上型号专用…

Facebook广告被拒:常见原因以及避免屏蔽的方法

大多数情况下&#xff0c;广告被屏蔽是因为违反了规则&#xff0c;这不仅仅是因为审核因素。有些规则并不明显&#xff0c;也没有在任何地方指定。例如&#xff0c;在广告中使用广告政策中未列出的停用词&#xff1b;审核算法确定照片描绘的模特过于暴露。下面小编将为你介绍Fa…

鸿蒙系统的开发与学习

1.开发工具的下载 DevEco Studio-HarmonyOS Next Beta版-华为开发者联盟 安装、环境配置时&#xff0c;建议 自定义目录 注意&#xff1a;路径中不要有 中文、特殊字符。 2.ArkTS基础总结 1&#xff09;三种数据类型 ① string 字符串&#xff1a;描述信息 ② number 数…

【MySQL】mysql访问

mysql访问 1.引入MySQL 客户端库2.C/C 进行增删改3.查询的处理细节4.图形化界面访问数据库4.1下载MYSQL Workbench4.2MYSQL Workbench远程连接数据库 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&a…

数据特征采样在 MySQL 同步一致性校验中的实践

作者&#xff1a;vivo 互联网存储研发团队 - Shang Yongxing 本文介绍了当前DTS应用中&#xff0c;MySQL数据同步使用到的数据一致性校验工具&#xff0c;并对它的实现思路进行分享。 一、背景 在 MySQL 的使用过程中&#xff0c;经常会因为如集群拆分、数据传输、数据聚合等…

C++ 仿QT信号槽二

// 实现原理 // 每个signal映射到bitset位&#xff0c;全集 // 每个slot做为signal的bitset子集 // signal全集触发&#xff0c;标志位有效 // flip将触发事件队列前置 // slot检测智能指针全集触发的标志位&#xff0c;主动运行子集绑定的函数 // 下一帧对bitset全集进行触发清…

CUDA编程基础

文章目录 1、GPU介绍2、CUDA程序进行编译3、CUDA线程模型3.1、一维网格一维线程块3.2、二维网格二维线程块3.3、三维网格三维线程块3.3、不同组合形式 4、nvcc编译流程5、CUDA程序基本架构6、错误检测函数6.1、运行时API错误代码6.2、检查核函数 7、CUDA记时7.1、记时代码7.2、…

基于Python爬虫的城市二手房数据分析可视化

基于Python爬虫的城市二手房数据分析可视化 一、前言二、数据采集(爬虫,附完整代码)三、数据可视化(附完整代码)3.1 房源面积-总价散点图3.2 各行政区均价3.3 均价最高的10个小区3.4 均价最高的10个地段3.5 户型分布3.6 词云图四、如何更换城市一、前言 二手房具有价格普…

博途通讯笔记1:1200与1200之间S7通讯

目录 一、添加子网连接二、创建PUT GET三、各个参数的意义 一、添加子网连接 二、创建PUT GET 三、各个参数的意义

换根dp,CF 633F - The Chocolate Spree

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 633F - The Chocolate Spree 二、解题报告 1、思路分析 2600的题&#xff0c;但是不算很困难。 先考虑暴力做法&#xff0c;如何得到两条不相交的路径&#xff1f; 枚举删除的边&#xff0c;得到两棵子树…

鼠标自动点击器怎么用?鼠标连点器入门教程!

鼠标自动点击器是适用于Windows电脑的自动执行鼠标点击操作的工具&#xff0c;主要用于模拟鼠标点击操作&#xff0c;实现鼠标高速点击的操作。通过模拟鼠标点击&#xff0c;可以在用户设定的位置、频率和次数下自动执行点击动作。 鼠标自动点击器主要的应用场景&#xff1a; …

数据操作10-15题(30 天 Pandas 挑战)

数据操作 1. 相关知识点1.12 分组与连表1.13 排名 2. 题目2.10 第N高的薪水2.11 第二高的薪水2.12 部门工资最高的员工2.13 分数排名2.14 删除重复的电子邮箱2.15 每个产品在不同商店的价格 1. 相关知识点 1.12 分组与连表 分组max_salaryemployee.groupby(departmentId)[sal…

超简易SpringBoot工程构建与部署 ( 图解 - 零基础专属 )

目录 简单了解MVC架构 模型&#xff08;Model&#xff09; 视图&#xff08;View&#xff09; 控制器&#xff08;Controller&#xff09; 基本环境准备 MYSQL建库建表 创库创表 智能生成数据 创建SpringBoot项目 配置pox.xml 代码提供 补充(IDEA的Maven要配置正确…

用kimi和claude自动生成时间轴图表

做时间轴图表并不难&#xff0c;但是很麻烦&#xff0c;先要大量收集相关事件&#xff0c;然后在一些图表软件中反复调整操作。现在借助AI工具&#xff0c;可以自动生成了。 首先&#xff0c;在kimi中输入提示词来获取某个企业的大事记&#xff1a; 联网检索&#xff0c;元语…

前后端数据交互流程

一、前言 用户在浏览器访问一个网站时&#xff0c;会有前后端数据交互的过程&#xff0c;前后端数据交互也有几种的情况&#xff0c;一下就简单的来说明一下 二、原理 介绍前后端交互前先来了解一下浏览器的功能&#xff0c;浏览器通过渲染引擎和 JavaScript 引擎协同工作&am…

uboot ethernet初始化

在Board_r.c 使用initr_net,先初始化phy,然后初始化gmac,driver/net/gmacv300/gmac.c实现管脚复用和gmac设备注册 Board_r.c #ifdef CONFIG_CMD_NETstatic int initr_net(void){puts("Net: ");eth_initialize();#if defined(CONFIG_RESET_PHY_R)debug("Reset…