ptaR7-6/zzuli2106 有去有回

题目

输入n个整数,第一趟按从左到右间隔k个数取数据,然后第二趟再从右到左间隔k-1个数取余下的数,如果数据没有取完,下一趟再间隔k-2个从左到右取数据,如此反复,直到所有的数据取完为止。注意:每趟第1个数是要取的,取走的数不再统计间隔数内。
 

输入

第一行输入两个整数n和k(0<n<=10000,0<=k<1000);
第二行输入n个int范围内的正整数,用空格隔开。

输出

按取数的顺序输出n个整数,用空隔隔开。

样例输入

6 1
1 2 3 4 5 6

样例输出

1 3 5 6 4 2

提示

数据范围
对于60%的数据,0 ≤k≤ 1
对于80%的数据,0 ≤k ≤ 10
对于100%的数据,0≤ k ≤ 1000 

思路 

本题的思路分为两种:

1.基本思路

采用标记的方法从两端来回颠倒,这里不做详细解释。

2.采用stack容器进行来回颠倒

可以采用stack容器进行来回的压栈和出栈,从而达到我们想要的目的,和想要的结果,这个思路的代码笔者将会详细进行解释和分析,详细代码如下。

代码实现

1.基本思路

#include <stdio.h>//第一种思路,用c语言代码编写,不过多解释
int main() {int n, k, i, N, count, flag;int a[10005];scanf("%d %d", &n, &k);for (i = 0; i < n; i++)scanf("%d", &a[i]);count = 0;while (count < n) {flag = 1;for (i = 0; i < n; i++) {if ((N == k || flag == 1) && a[i] != -1) {printf("%d ", a[i]);a[i] = -1;count++;N = 0;flag++;}if (a[i] != -1)N++;}if (count >= n)break;if (k > 0)k--;N = 0;flag = 1;for (i = n - 1; i >= 0; i--) {if ((N == k || flag == 1) && a[i] != -1) {printf("%d ", a[i]);a[i] = -1;N = 0;count++;flag++;}if (a[i] != -1)N++;}if (k > 0)k--;}
}

2.stack容器

#include<bits/stdc++.h>
using namespace std;
int main(){int n,k,i,t,m=0,j=0;cin>>n>>k;//输入n为数的个数vector<int>A(n);//原数组vector<int>ans(n);//结果集for(i=0;i<n;i++)cin>>A[i];//输入stack<int>a,b;//用于来回反转的容器for(i=n-1;i>=0;i--){a.push(A[i]);//反向压栈,这样正好栈顶是第一个}while(!a.empty()){//一直进行到两个数组都为空t=a.top(),a.pop();//将顶部的取出来,并且删除该元素m++;//进行计数if(m%(k+1)==1||k==0)ans[j++]=t;//如果计数器对(k+1)取余==1,那么刚好就是该数,如果间隔是0,那么就顺序输入即可else b.push(t);//如果不是间隔数,那么压入b容器中,这样刚好反转顺序if(a.empty()){//如果a为空,那么两容器交换swap(a,b);k--;//完成一轮间隔取值,k自减m=0;//计数器更新}	}for(i=0;i<n;i++){cout<<ans[i]<<' ';//输出结果集}
}

反思

本题为我们引入了stl中stack容器的使用,两个stack容器能够不断地为我们提供反转的机会,比计数器有更好的想法和较小的时间复杂度,通过该思想,我们可以融会贯通,像这种来回颠倒的题目,都可以使用stack容器来代替来回颠倒的标志器,至此,我们对压栈出栈有了全新的理解和认知,希望大家通过本篇能够认识和熟悉stack,了解stl容器的强大和美妙。

总结

stl容器是c++必备的,用stl能帮助我们做很多c语言无法实现的操作和较低的时间复杂度,为我们提供新的思考和便利的方法,笔者希望与读者共勉,共同在编程的道路上不断成长,如果觉得作者写的还不错的话,记得留下你的点赞关注和收藏喔~

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

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

相关文章

《SRE Google 运维解密》笔记

指导思想 介绍 Google 生产环境介绍 borg 是 k8s 的前身。 拥抱风险 服务质量 现在的 SLO 没有更细粒度的划分到季度 如果划分到季度&#xff0c;需要用这个数据来限制什么或者进行什么活动&#xff1f; L1S 链路的 SLA 的签署工作已经做了很多 对于 SLA 的达成情况数据没有…

Iceberg从入门到精通系列之十九:分区

Iceberg从入门到精通系列之十九&#xff1a;分区 一、认识分区二、Iceberg的分区三、Hive 中的分区四、Hive 分区问题五、Iceberg的隐藏分区六、分区变换七、分区变换 一、认识分区 分区是一种通过在写入时将相似的行分组在一起来加快查询速度的方法。 例如&#xff0c;从日志…

基于springboot生鲜交易系统源码和论文

首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包括软件架构模式、整体功能模块、数据库设计。本项…

IPv6路由协议---IPv6动态路由(OSPFv3-3)

OSPFv3使用Link-local地址 OSPFv3是运行在IPv6上的路由协议,同样使用链路本地地址来维持邻居,同步LSA数据库。除Vlink外的所有OSPFv3接口都使用链路本地地址作为源地址及下一跳来发送OSPFv3报文,带来的好处: 不需要配置IPv6全局地址,就可以得到OSPFv3拓扑,实现拓扑与地址…

【职工管理系统(C++版)】

一、管理系统需求 职工管理系统可以用来管理公司内所有员工的信息。 本次主要利用C来实现一个基于多态的职工管理系统。 公司中职工分为三类:普通员工、经理、老板&#xff0c;显示信息时&#xff0c;需要显示职工编号、职工姓名、职工岗位、以及职责。 普通员工职责:完成经…

Nacos和Eureka比较、统一配置管理、Nacos热更新、多环境配置共享、Nacos集群搭建步骤

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Nacos和eureka的对比二、统一配置管理二、Nacos热更新方式一方式二 三、多环境配置共享四、Nacos集群搭建步骤&#xff08;黑马springCloud的p29&#xff0…

springboot邮件发送

一、讲一下thymeleaf的简单使用 1.在根路径下写一个 resources/templates/good.html 文件 2. 在代码实现 记得 不要加 RequestBody这个注解&#xff0c;因为它会把string当作普通 的字符串&#xff0c;而不是去渲染对应的good.html视图 3.看效果 关于图片的显示&#xff0…

黑马程序员 Docker笔记

本篇学习笔记文档对应B站视频&#xff1a; 同学们&#xff0c;在前两天我们学习了Linux操作系统的常见命令以及如何在Linux上部署一个单体项目。大家想一想自己最大的感受是什么&#xff1f; 我相信&#xff0c;除了个别天赋异禀的同学以外&#xff0c;大多数同学都会有相同的…

【动态规划】【滑动窗口】C++算法:3003 执行操作后的最大分割数量

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 C算法&#xff1a;滑动窗口总结 动态规划 LeetCode3003 执行操作后的最大分割数量 给你一个下标从 0 开始的字符串 s 和一个整数 k。 你需要执行以下分割操作&#xff0c;直到字符串 s 变为 空&#xff1…

四大会计假设

目录 一. 会计主体假设二. 持续经营假设三. 会计期间假设四. 货币计量假设 \quad \quad 一. 会计主体假设 \quad 会计主体: 会计工作为其服务的特定单位或组织。 会计主体的定义 1.具有一定数量的资金。 2.进行独立的生产经营或其他活动。 3.实行独立核算。 \quad 会计主体假设…

leetcode 125. 验证回文串

题目&#xff1a; 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &…

阅读文献-胃癌

写在前面 今天先不阅读肺癌的了&#xff0c;先读一篇胃癌的文章 文献 An individualized stemness-related signature to predict prognosis and immunotherapy responses for gastric cancer using single-cell and bulk tissue transcriptomes IF:4.0 中科院分区:2区 医学…

JFinal综合信息管理系统

项目地址&#xff1a;mendianyu/AdvancedManagement: 综合信息管理系统 (github.com) 项目演示地址&#xff1a;软件构造大作业演示视频_哔哩哔哩_bilibili 项目功能 一&#xff1a;基于Jfinal构建信息管理系统&#xff0c;要求包含用户管理&#xff0c;翻译业务模块管理&…

初识Spring

1.Spring官网&#xff1a; 2.官网学习的顺序&#xff1a;先学Spring,再学SpringBoot,然后SpringCloud,Spring Cloud Data Flow。 3.Spring Framework界面&#xff1a; 4.github上的源代码&#xff1a; 5.进入使用说明文档&#xff1a; 主要是根据这个进行学习的。 6.我们用mave…

Linux Debian12使用VSCode和Python搭建flask开发环境

一、安装VSCode 在Linux Debian12系统上安装VSCode教程可以参考网上相关教程。 二、安装Python 打开VSCode&#xff0c;安装python和python扩展包&#xff0c;如下图所示&#xff1a; 三、创建Python虚拟环境 1.新建文件夹testFlask 2.用vscode打开文件夹testFlask&#xf…

前端 TS 语法继承 多态 修饰符 readonly 抽象类 ts 基本写法 可选 剩余参数 函数重载 接口 类(3)

继承 继承之间的叫法 A类继承了B类&#xff0c;那么A类叫做子类&#xff0c;B类叫成基类 子类 ---》派生类 基类 ---》超类&#xff08;父类&#xff09; // 继承之间的叫法 // A类继承了B类&#xff0c;那么A类叫做子类&#xff0c;B类叫成基类 // 子类 ---》派生类 // 基类 …

阅读笔记lv.1

阅读笔记 sql中各种 count结论不同存储引擎计算方式区别count() 类型 责任链模式常见场景例子&#xff08;闯关游戏&#xff09; sql中各种 count 结论 innodb count(*) ≈ count(1) > count(主键id) > count(普通索引列) > count(未加索引列)myisam 有专门字段记录…

计算机体系结构----缓存一致性/多处理机

本文严禁转载&#xff0c;仅供学习使用。参考资料来自中国科学院大学计算机体系结构课程PPT以及《Digital Design and Computer Architecture》、《超标量处理器设计》、同济大学张晨曦教授资料。如有侵权&#xff0c;联系本人修改。 本文衔接上文计算机体系结构----存储系统 …

python爬虫,验证码识别,携带cookies请求

古诗词网案例!!! 识别验证码类型: # 此处用到的图片验证码识别网址为:http://ttshitu.com/ 图鉴 import base64 import json import requests # 一、图片文字类型(默认 3 数英混合): # 1 : 纯数字 # 1001:纯数字2 # 2 : 纯英文 # 1002:纯英文2 # 3 : 数英混合 # 1003:…

用通俗易懂的方式讲解:大模型微调方法总结

大家好&#xff0c;今天给大家分享大模型微调方法&#xff1a;LoRA,Adapter,Prefix-tuning&#xff0c;P-tuning&#xff0c;Prompt-tuning。 文末有大模型一系列文章及技术交流方式&#xff0c;传统美德不要忘了&#xff0c;喜欢本文记得收藏、关注、点赞。 文章目录 1、LoRA…