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.hqwc.cn/news/341568.html

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

相关文章

【算法】增减序列(贪心,差分)

题目 给定一个长度为 n 的数列 a1,a2,…,an&#xff0c;每次可以选择一个区间 [l,r]&#xff0c;使下标在这个区间内的数都加一或者都减一。 求至少需要多少次操作才能使数列中的所有数都一样&#xff0c;并求出在保证最少次数的前提下&#xff0c;最终得到的数列可能有多少种…

03 - 系统调用

---- 整理自 王利涛老师 课程 实验环境&#xff1a;宅学部落 www.zhaixue.cc 文章目录 1. 系统调用基本概念1.1 一个系统调用的例子1.2 什么是系统调用&#xff1f;软件复用的角度 2. 软中断&#xff1a;系统调用的入口2.1 权限管理2.2 系统调用号2.4 man 2 syscall2.5 实验&am…

t2vec code

文章目录 执行过程preprocess.jl 解释h5 文件结构 执行过程 (base) zzqserver1:~/project/t2vec/preprocessing$ julia porto2h5.jl Processing 1710660 trips… 100000 200000 300000 400000 500000 600000 700000 800000 900000 1000000 1100000 1200000 1300000 1400000 15…

HiDataPlus 3.3.2-005 搭建(个人的一点心得体会 x86 平台)

HDP 集群搭建 前置安装 yum -y install createrepo yum install -y lrzsz yum install -y wget yum install -y vim修改当前集群机器的主机名 hostnamectl set-hostname XXX​ 这里的 XXX 就是要设置的当前机器的主机名称。主机名称是集群唯一的&#xff0c;一定不要重复&am…

解决“百度网盘启动缓慢”问题

最近在使用百度网盘&#xff0c;双击桌面的《百度网盘》图标&#xff0c;发现有等好几分钟&#xff0c;软件才会启动。百度网盘启动太慢了&#xff0c;后面发现百度网盘&#xff0c;使用dll注入技术&#xff0c;附加到很多不相干的进程里&#xff0c;比如附加explorer进程、附加…

使用阿里云镜像创建一个Spring Boot项目

由于现在的idea在创建项目时已经不支持Java8版本了&#xff0c;如果我们还想用8版本&#xff0c;可以使用阿里云镜像创建。所以得改变原有的地址为&#xff1a;https://start.aliyun.com springboot版本选择2开头的任意版本的。 1.配置6个依赖 2.改变下载依赖地址 下载依赖默认…

强化学习求解TSP(八):Qlearning求解旅行商问题TSP(提供Python代码)

一、Qlearning简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于奖励的决策问题。它是一种无模型的学习方法&#xff0c;通过与环境的交互来学习最优策略。Q-learning的核心思想是通过学习一个Q值函数来指导决策&#xff0c;该函数表示在给定状态下采取某个动作所获…

UE 引擎工具笔记

2023虚幻技术分享会视频 1.2023年虚幻引擎最新功能和技巧 [UFSH2023]2023年虚幻引擎最新功能和技巧 | Chris Murphy Epic Games_哔哩哔哩_bilibili 推荐细看下.总结了UE5的功能大概 2.调试技巧 [UFSH2023]总有一个你不知道的虚幻引擎调试技巧 | 陈拓 Epic Games_哔哩哔哩_…

WPF XAML(一)

一、XAML的含义 问&#xff1a;XAML的含义是什么&#xff1f;为什么WPF中会使用XAML&#xff1f;而不是别的&#xff1f; 答&#xff1a;在XAML是基于XML的格式&#xff0c;XML的优点在于设计目标是具有逻辑性易读而且简单内容也没有被压缩。 其中需要提一下XAML文件在 Visu…

5、MAE:探索视觉预训练模型

目录 1、论文 2、背景与动机 3、回答的问题 4、创新与卖点 5、实现细节 模型框架 具体步骤 简单代码示例 6、一些资料 1、论文 Masked Autoencoders Are Scalable Vision Learnershttps://arxiv.org/pdf/2111.06377.pdf 2、背景与动机 在深度学习和计算机视觉的领域中…

SpringBoot知识02

1、快速生成mapper和service &#xff08;自动生成简单的单表sql&#xff09; 2、springboot配置swagger&#xff08;路径不用加/api&#xff09; &#xff08;1&#xff09;主pom导包&#xff08;子pom要引用&#xff0c;可选依赖&#xff09; <!-- swagger3…

Odrive 学习系列一:vscode 编译Odrive

搭建环境可参考Markerbase教程,很详细了。 简单说一两点: 解压ODrive-fw-v0.5.1.zip: 打开ODrive-fw-v0.5.1文件夹,找到Firmware文件夹,用vscode打开该文件夹: 按照以下内容操作: 编译工程: 打开 中断(terminal),输入 make -j4 回车 进行编译。编译…