【卡码网C++基础课 6.数组的倒序与隔位输出】

news2024/11/22 23:12:13

目录

  • 题目描述与分析
  • 一、数组
  • 二、Vector
  • 三、倒序输出数组
  • 四、隔位输出
  • 五、完整代码


题目描述与分析

题目描述:
给定一个整数数组,编写一个程序实现以下功能:
1.将输入的整数数组倒序输出,每个数之间用空格分隔。
2.从正序数组中,每隔一个单位(即索引为奇数的元素),输出其值,同样用空格分隔。

输入描述:
第一行包含一个整数 n,表示数组的长度。
接下来一行包含 n 个整数,表示数组的元素。

输出描述:
首先输出倒序排列的数组元素,然后输出正序数组中每隔一个单位的元素。

输入示例:

5
2 3 4 5 6

输出示例:

6 5 4 3 2
2 4 6

一、数组

表示一组数据可以用数组,在 C++ 中,数组是一种基础的数据结构,用来存储固定大小的相同类型元素的序列。数组中的每个元素都可以通过数组名和索引访问。数组的声明、初始化、操作和特性是 C++ 编程中的重要基础。
数据结构的概念理解起来比较抽象,它表示了数据在计算中被组织和存储的形式,而数组呢就是一组按照一定次序排列的数值,数组中的每一个变量被称为元素,比如下图中就是数组的存储形式:
在这里插入图片描述
数组的特性
固定大小:一旦声明,数组的大小不能改变。
连续的内存位置:数组的元素在内存中连续存储,这意味着可以通过指针算术操作来遍历数组。
同一类型:所有数组元素必须是同一类型。

C++中声明数组的方式为dataType arrayName[arraySize]。
dataType表示数组元素的类型,比如int、double、char等。
arrayName是为数组指定的名称,类似于变量名称。
arraySize是数组的大小,即它可以容纳多少个元素。

// 声明一个包含5个整数的数组
int myArray[5];

C++中使用大括号 {} 初始化数组的元素,也可以逐个赋值。

// 使用大括号初始化一个长度为5的整型数组
int arr[5] = {1, 2, 3, 4, 5}; 

// 定义一个长度为3的整型数组,并逐个赋值
int arr1[3];
arr1[0] = 10;
arr1[1] = 20;
arr1[2] = 30; 

访问数组中的元素,您可以使用下标操作符 [],请注意,下标从0开始,直到数组长度的前一位。

int value = arr[2]; // 获取数组 arr 的第三个元素的值,即 3

除了访问元素,还可以通过下标操作符 [] 修改数组中的元素的值。

arr[0] = 100;  // 修改数组 arr 的第一个元素的值为 100

使用循环结构,如 for 循环,可以遍历数组中的所有元素。

for (int i = 0; i < 5; i++) {
    cout << arr[i] << " ";
}

需要注意的是,C++中的数组没有提供自动的长度信息,因此在处理数组时必须小心,以避免访问越界的元素。

int a = arr[5]; // 数组长度为5,索引范围为0-4,如果尝试访问arr[5],会越界访问数组范围,导致程序运行出错

二、Vector

在 C++ 中,vector 是一个封装了动态大小数组的标准模板库(STL)容器。与普通数组相比,vector 提供了更多的灵活性和功能,如自动管理内存、容易地插入和删除元素等。vector 是在 头文件中定义的,属于 std::vector 命名空间。

#include <vector>
using std::vector;

容器的创建方式为vector<类型> 名称, 无需指明长度

vector<int> myVector; // 创建一个空vector, 元素是int类型的

除此之外,还有一些别的创建方式,常见的有

vector<int> myVector = {1, 2, 3, 4, 5}; // 创建一个包含整数元素的容器并初始化元素

vector<int> myVector(10); // 创建一个包含10个元素的容器,元素为int类型(值被系统默认初始化为0)

vector<int> myVector(10, -1); // 创建一个包含10个重复元素的容器,每个元素的值都是-1

我们已经知道,vector可以动态调整大小,这种调整是通过vector内置的方法push_back动态添加元素来实现的。
push_back()负责将一个值push(推送)到vector中的back(尾端)

vector<int> myVector = {1, 2, 3, 4, 5};
myVector.push_back(6); // 往容器的最末端添加数字6

与数组类似,仍然可以使用下标操作符 [] 访问 vector 中的元素

int value = myVector[0]; // 获取第一个元素的值,即 1

还可以使用内置的size()方法来获取容器当前的元素数量

int size = myVector.size(); // 获取vector的大小

在数组中,我们通过for循环完成了对数组的遍历,vector 遍历的方式是一样的。

for (int i = 0; i < myVector.size(); i++) {
    cout << myVector[i] << " "; // 从索引为0开始,遍历到i等于size的时候退出循环,完成整个遍历
}

此外,vector还内置了一些别的方法供我们使用:

myVector.pop_back(); // 删除vector末尾的元素
myVector.clear(); // 清空vector中的所有元素
myVector.empty(); // 判断vector是否不含有任何元素,如果长度为0,则返回真,否则,返回假

三、倒序输出数组

题目的第一个要求是实现将输入的整数数组倒序输出,每个数之间用空格分隔。
根据题目要求,我们可以写出基础的代码:

#include <iostream>
using namespace std;
int main() {
    int n; // 用来接收数组的长度
    cin >> n; // 输入数组长度
}

⚠️ 因为要输入变量,才能确定数组的大小,属于不清楚元素的确切个数,理应使用vector,但这里我们为了展示数组操作,暂时这样演示,实际上int arr[n]这种操作是不被允许的,并且在编译器中可能会报错。

输入n之后,我们可以按照要求定义一个大小为n的整数数组

int arr[n]; // 声明一个大小为 n 的整数数组

对数组进行遍历,输入数组元素

// 输入数组元素
for (int i = 0; i < n; i++) {
    cin >> arr[i];
}

倒序输出数组,只需要从数组的最后一位倒着遍历即可

// 倒序输出数组元素,每个数之间用空格分隔
for (int i = n - 1; i >= 0; i--) {
    cout << arr[i];
  // 每个数之间用空格分隔
    if (i > 0) {
        cout << " ";
    }
}

完整代码如下:

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n; // 输入数组长度
    int arr[n]; // 声明一个大小为 n 的整数数组

    // 输入数组元素
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }

    // 倒序输出数组元素,每个数之间用空格分隔
    for (int i = n - 1; i >= 0; i--) {
        cout << arr[i];
        if (i > 0) {
            cout << " ";
        }
    }

    return 0;
}

如果使用vector,首先先引入头文件vector, 并定义一个vector容器

#include<iostream>
#include<vector>
using namespace std;
int main() {
    // 定义一个整型vector
    vector<int> nums;   
}

接着我们使用while循环代替for循环,控制n及n个数据的输入

int n, num; // n代表vector长度
cin >> n;  // 输入n
// 输入n个数字
while(n--) {
  cin >> num;
  // 使用push_back方法动态添加元素
  nums.push_back(num);
}

和数组类似,依旧是从vector的最后一个元素开始倒序遍历,不过我们可以使用vector.size()表示vector的长度

// 倒序输出元素,每个数之间用空格分隔, 使用size()表示vector的大小
for (int i = nums.size() - 1; i >= 0; i--) {
  cout << nums[i];
  if (i > 0) {
      cout << " ";
  }
}

完整代码如下:

#include<iostream>
#include<vector>
using namespace std;
int main() {
    // 定义一个整型vector
    vector<int> nums;
    int n, num;
    cin >> n;  // 输入数组长度
    while(n--) {
          cin >> num;
          // 使用push_back方法动态添加元素
           nums.push_back(num);
    }
      // 倒序输出元素,每个数之间用空格分隔, 使用size()表示vector的大小
    for (int i = nums.size() - 1; i >= 0; i--) {
        cout << nums[i];
        if (i > 0) {
            cout << " ";
        }
    }
}

四、隔位输出

题目的第二个要求是每隔一个元素输出其值,中间用空格分隔,只需要对数组从索引为0的位置进行遍历,每次递增2,中间输出空格,这样就能保证输出索引为0、2、4、……位置的元素,代码如下:

// 每次对i增加2,就能跳过一个数字进行隔位输出
for(int i = 0; i < n; i+=2) {
    cout << arr[i];
  // 输出空格
    if (i < n - 1) {
        cout << " ";
    }
}

使用vector并没有改变逻辑,只不过可以用size()表示vector的长度,代码如下:

// 隔位输出数组元素,中间用空格分隔,使用size()表示vector的大小
for(int i = 0; i < nums.size(); i += 2) {
    cout << nums[i];
  // 输出空格
    if (i < nums.size() - 1) {
        cout << " ";
    }
}

五、完整代码

使用数组的完整代码如下:

#include<iostream>
using namespace std;

int main() {
    int n;
    cin >> n; // 输入数组长度
    int arr[n]; // 声明一个大小为 n 的整数数组

    // 输入数组元素
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }

    // 倒序输出数组元素,每个数之间用空格分隔
    for (int i = n - 1; i >= 0; i--) {
        cout << arr[i];
        if (i > 0) {
            cout << " ";
        }
    }
        // 换行输出
    cout << endl;
  
      // 隔位输出数组元素,中间用空格分隔
    for(int i = 0; i < n; i+=2) {
        cout << arr[i];
        if (i < n - 1) {
            cout << " ";
        }
    }
}

使用vector的完整代码如下:

#include<iostream>
#include<vector>
using namespace std;
int main() {
    // 定义一个整型vector
    vector<int> nums;
    int n, num;
    cin >> n;  // 输入数组长度
      // 循环输入数组中的数字
    while(n--) {
        cin >> num;
          // 使用push_back方法动态添加元素
           nums.push_back(num);
    }
      // 倒序输出数组元素,每个数之间用空格分隔, 使用size()表示vector的大小
    for (int i = nums.size() - 1; i >= 0; i--) {
        cout << nums[i];
        if (i > 0) {
            cout << " ";
        }
    }
    std::cout << std::endl;
    // 隔位输出数组元素,中间用空格分隔,使用size()表示vector的大小
    for(int i = 0; i < nums.size(); i += 2) {
        cout << nums[i];
        if (i < nums.size() - 1) {
            cout << " ";
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

可视化大屏-实现自动滚动

一、背景&#xff1a;可视化大屏通常需要用到自动滚动的效果&#xff0c;本文主要采用的是vue-seamless-scroll组件来实现&#xff08;可参考官方文档&#xff09; 二、实现效果&#xff1a; 自动滚动 三、代码实现&#xff1a; 解题思路&#xff1a; 1.先安装依赖包 npm inst…

zTree 异步加载实现 点击加载

效果图如下 每级最多显示5000条数据&#xff0c;点击加载 会再次加载5000条数据 可以监听滚动条 动态加载 我这没实现这种方式。 <!-- ztreejs --> <script src".ztree/js/jquery.ztree.core.min.js" type"text/javascript"></script>…

DLAFormer:微软提出多任务统一的端到端文本分析Transformer模型 | ICDAR 2024

论文提出新颖的基于Transformer的端到端方法DLAFormer&#xff0c;在统一的模型中集成多个文档布局分析任务&#xff0c;包括图形页面对象检测、文本区域检测、逻辑角色分类和阅读顺序预测。为了实现这一目标&#xff0c;将各种DLA子任务视为关系预测问题并提出了统一标签空间方…

kafka监控工具EFAK

kafka监控工具&#xff08;EFAK&#xff09; 1、下载2、解压3、配置3.1、安装数据库&#xff0c;需要是mysql&#xff0c;并创建ke数据库3.2、修改配置文件 4、启动4.1、启动zookeeper4.2、启动kafka4.3、启动EFAK 5、访问http://ip:8048 github地址&#xff1a;https://github…

colmap的几种相机类型和内外参取得方法

colmap的相机类型可以参考models.h文件。 主要有以下几种相机类型&#xff1a; SimplePinhole&#xff1a; 内参格式&#xff1a;f, cx, cy 实际用的时候&#xff1a;fxfyf Pinhole: 内参格式&#xff1a;fx, fy, cx, cy 其他可以自行查看models.h文件。 内参存放在images.b…

《微信小程序开发》系列:第1篇—微信小程序简介

1.什么是微信小程序 微信小程序是一种运行在微信内部的 轻量级 应用程序。 在使用小程序时 不需要下载安装&#xff0c;用户 扫一扫 或 搜一下 即可打开应用。它也体现了 “用完即走” 的理念&#xff0c;用户不用关心安装太多应用的问题。它实现了应用“触手可及”的梦想&…

回归分析系列14— 多项式回归

17 多项式回归 17.1 简介 多项式回归是线性回归的一种扩展&#xff0c;它允许回归模型包括输入变量的高次项。这种方法特别适合处理非线性关系的数据。 17.2 多项式回归模型 在多项式回归中&#xff0c;模型形式如下&#xff1a; 其中&#xff0c;p 是多项式的阶数&#xf…

Vue项目-三级联动的路由跳转与传参

三级联动组件的路由的跳转与传参 三级联动&#xff0c;用户可以点击的&#xff1a;一级分类、二级分类和三级分类 以商城项目为例&#xff0c;Home模块跳转到Search模块&#xff0c;以及会把用户选中的产品&#xff08;产品名字、产品ID&#xff09;在路由跳转的时候&#xff…

【控糖有道,健康无忧!糖尿病患者的饮食黄金法则大揭秘】

在快节奏的现代生活中&#xff0c;糖尿病作为一种常见的慢性疾病&#xff0c;正悄然影响着越来越多人的生活质量。面对这一挑战&#xff0c;科学合理的饮食管理成为了控制病情、提升生活品质的关键。今天&#xff0c;就让我们一同揭开糖尿病饮食的黄金法则&#xff0c;让“控糖…

CentOS服务器三级等保加固

1.密码周期: vim /etc/login.defs max_days:90 mindays:2 minlen:8 warnage:72.密码复杂度: vim /etc/pam.d/system-auth &#xff1a; password requisite pam_cracklib.so retry3 difok3 minlen8 lcredit-1 dcredit-1 ucredit-1 ocredit-1 【Ubuntu系统->vim /etc/pam.d/c…

Linux组的介绍,所有者,所在组,修改所在组

目录 linux组的介绍 文件/目录所有者 组的创建 文件/目录所在组 其它组 改变用户所在组 linux组的介绍 每个用户必须属于一个组&#xff0c;不能独立于组外。 这个文件是谁创建的&#xff0c;这个文件的所有者就是谁。 这个文件属于组1&#xff0c;那么组2对它来说就…

VoLTE基本信令流程(整理的学习笔记)

VoLTE基本信令流程 1. 注册基本过程 UE进行Attach&#xff0c;建立QCI9的默认承载使用IMS APN建立PDN连接&#xff0c;建立 QCI5 的默认承载&#xff0c;用于传送 SIP 信令&#xff0c;同时获取到了IMS入口的P-CSCF地址信息UE 通过 QCI5 的默认承载向 IMS 发起注册请求IMS 域…

亚马逊ERP全功能 无隐藏收费的几个地方

亚马逊全功能 ERP 采集图片订单翻译&#xff0c;无任何隐藏收费。 说说有关采集和管理的软件&#xff01;1. 对于做跟卖的人来说需要大量采集产品&#xff0c;采集过来的产品还需要进行文本、图片翻译、修图等操作&#xff0c;图片储存和站点维护另算。市面上有些 ERP 软件在这…

美国高防服务器到底怎么选

美国高防服务器因其强大的硬件设施、高度的网络连接性、丰富的带宽资源和先进的防御技术而受到全球用户的欢迎。以下是选择美国高防服务器时需要考虑的关键因素&#xff0c;rak部落为您整理发布美国高防服务器到底怎么选。 确定服务器需求 容量和带宽&#xff1a;根据业务规模…

共享电动单车管理系统 ---附源码131016

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于共享电动单车管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了共享电动单车管理系统&#xff0c;它彻底…

React 学习——Class类组件生命周期函数

componentDidMount&#xff1a;组件渲染完执行一次&#xff0c;发送网络请求 componentWillUnmount&#xff1a;组件卸载的时候执行&#xff0c;副作用&#xff08;清理的工作 清除定时器 事件绑定&#xff09; import { Component,useState } from react; class Counter e…

敏捷架构开发方法和实践:迎接数字化时代的挑战

在当前飞速发展的数字化时代&#xff0c;传统企业架构的局限性日益显现&#xff0c;特别是在应用敏捷方法的过程中&#xff0c;许多企业发现其架构和组织结构无法支持真正的敏捷转型。为应对这一挑战&#xff0c;《数字化时代的敏捷架构》提出了一个全新的架构框架——敏捷架构…

Typora 软件介绍和利用

Typora 软件介绍 Typora 是一款功能强大的 Markdown 编辑器&#xff0c;以简洁直观的设计和无缝的实时预览而著称。本文将详细介绍 Typora 的功能、优势以及使用体验。 目录 简介主要功能软件优势使用体验系统支持安装与设置 简介 Typora 是一款由 Abner Lee 开发的 Markdo…

最新完整版手机APP软件应用下载类网站模板源码/手游导航源码app软件下载

源码简介&#xff1a; 手机APP软件应用下载类网站模板源码&#xff0c;它是最新完整版&#xff0c;也是手游导航源码&#xff0c;app软件排行榜下载网页源码。 这是一款带有强大后台的app软件手游类源码&#xff0c;界面设计得很漂亮&#xff0c;非常适合做app软件、手机软件…

PPT分享:埃森哲-流程制造的智能工厂规划设计

在分享PPT之前&#xff0c;笔者与大家一起熟悉下&#xff0c;流程制造是什么&#xff0c;与离散制造有哪些区别。 往期回顾>> 125页PPT&#xff1a;某行业数据架构蓝图规划方案 170页PPT&#xff1a;制造业采购供应链及财务管控业务流程蓝图规划 60页PPT:集团SRM项目业…