ptaR7-6/zzuli2106 有去有回

news2024/11/19 1:36:52

题目

输入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.coloradmin.cn/o/1375822.html

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

相关文章

API设计:从基础到优秀实践

在这次深入探讨中&#xff0c;我们将深入了解API设计&#xff0c;从基础知识开始&#xff0c;逐步进阶到定义出色API的最佳实践。 作为开发者&#xff0c;你可能对许多这些概念很熟悉&#xff0c;但我将提供详细的解释&#xff0c;以加深你的理解。 API设计&#xff1a;电子商…

2024年 最新 iPhone手机 历代机型、屏幕尺寸、纵横比、分辨率 整理

&#x1f3ac; 博客主页&#xff1a;https://xiaoy.blog.csdn.net &#x1f3a5; 本文由 呆呆敲代码的小Y 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;Unity系统学习专栏 &#x1f332; 游戏制作专栏推荐&#xff1a;游戏制作 &…

css3边框与圆角

css3边框与圆角 前言边框的三要素边框的三要素小属性 四个方向的边框四个方向边框的三要素小属性 去掉边框利用边框制作三角形圆角 border-radius单独设置四个圆角小属性百分比为单位 盒子阴影阴影延展内阴影多阴影 结语 前言 在网页设计中&#xff0c;边框与圆角不仅仅是简单…

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

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

对git中tag, branch的重新理解

1. 问题背景 项目中之前一个tag&#xff08;v1.0&#xff09;打错了&#xff0c;想删除它&#xff0c;但我们从此tag v1.0中迁出新建分支Branch_v1.0,在此分支下修复了bug&#xff0c;想重新打一个tag v1.0&#xff0c;原来的tag v1.0可以删除掉吗&#xff1f; 错误的理解&am…

SQL-分组查询

目录 DQL-分组查询 分组查询注意事项&#xff1a; DQL- 排序查询 &#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL &…

RT-Thread入门笔记4-跑马灯线程实例

RT-Thread操作系统是基于线程调度的多任务系统。 线程状态切换 调度过程是一种完全抢占式的基于优先级的调度算法。 支持8/32/256优先级&#xff0c;其中0表示最高&#xff0c;7/31/255表示最低。最低优先级7/31/255优先级用于空闲线程。 支持以相同优先级运行的线程。 共享时…

【AI视野·今日NLP 自然语言处理论文速览 第七十二期】Mon, 8 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 8 Jan 2024 Totally 17 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers DeepSeek LLM: Scaling Open-Source Language Models with Longtermism Authors DeepSeek AI Xiao Bi, Deli Ch…

jupyter notebook 配置conda 虚拟环境python

conda创建python环境 conda create -n openvoice python3.9 激活环境 source activate openvoice 在虚拟环境中安装ipykernel pip install ipykernel 添加虚拟环境进到 jupyter notebook python -m ipykernel install --user --name openvoice --display-name openvoice …

修改idea或者pycharm或者android studio的快捷键,快速跳转到行尾

ctrl enter这个快捷键是idea默认配置的&#xff0c;就是将光标所在的行切一刀&#xff0c;并且换到下一行。但是在我的开发习惯里面不怎么使用ctrl enter这个快捷键&#xff0c; 反而开发java或者flutter软件需要快速跳转到行尾添加分号 ; &#xff0c;但是使用end键脱离了我…

C++进阶(三)多态

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、多态的概念1、概念 二、多态的定义及实现1、多态的构成条件2、虚函数3、虚函数的重写4、C…

groovy XmlParser 递归遍历 xml 文件,修改并保存

使用 groovy.util.XmlParser 解析 xml 文件&#xff0c;对文件进行修改&#xff08;新增标签&#xff09;&#xff0c;然后保存。 是不是 XmlParser 没有提供方法遍历每个节点&#xff0c;难道要自己写&#xff1f; 什么是递归&#xff1f; 不用说&#xff0c;想必都懂得~ …

ERROR in Plugin “react“ was conflicted .... 天坑留念-turborepo、eslint plugin

前两天项目代码拉下来&#xff0c;装完依赖启动的时候直接报错&#xff1a; [eslint] Plugin "react" was conflicted between ".eslintrc.js eslint-config-custom eslint-config-alloy/react" and "BaseConfig D:\pan\erp\test\business-servic…

Java21 如何使用switch case

1. Java8 和 Java21 Java8 引入字符串和枚举 Java21 可以返回值, yield关键字, switch 表达式, 模式匹配, null值处理 2. 代码案例 1. Java8 public static void java8() {String day "tuesday";switch (day) {case "monday":System.out.println("w…

vue3+vite+ts+pinia新建项目(略详细版)

1、新建项目 npm create vite@latest 2、安装依赖 yarn add vue-router yarn add -D @types/node vite-plugin-pages sass sass-loader 3、配置别名 //vite.config.ts import { defineConfig } from vite import path from node:path export default defineConfig({ plu…

基于ssm快餐店点餐结算系统的设计与实现+vue论文

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装快餐店点餐结算系统软件来发挥其高效地信息处理的作用&…

Python-基础语法

标识符 第一个字符必须是字母表中字母或下划线 _ 。标识符的其他的部分由字母、数字和下划线组成。标识符对大小写敏感。在 Python 3 中&#xff0c;可以用中文作为变量名&#xff0c;非 ASCII 标识符也是允许的了。 python保留字 保留字即关键字&#xff0c;我们不能把它们用…

php大型酒店管理系统源码(多酒店版)带安装手册

php大型酒店管理系统源码(多酒店版&#xff09;带安装手册 系统的运行环境要求PHP7.2以上 功能介绍&#xff1a; 房间动态、房间管理、优惠活动、预定信息、商品管理、营业查询、交班管理 会员营销、查看房价、数据统计、客房服务、物品租借、夜审设置、系统设置 酒店设置、计费…

代码随想录day25 回溯算法加强练习

216.组合总和III 题目 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数&#xff0c;并且每种组合中不存在重复的数字。 说明&#xff1a; 所有数字都是正整数。解集不能包含重复的组合。 示例 1: 输入: k 3, n 7 输出: [[1,2,4]] 示例 2: 输入…

金融中介管理系统,助您高效管理金融中介业务!

金融中介管理系统是一种用于有效管理金融中介业务的软件系统。它提供了一系列工具和功能&#xff0c;帮助金融中介机构简化和优化其日常运营和管理流程。 金融中介管理系统通常具有以下特点和功能&#xff1a; 1. 客户管理 系统可以帮助机构记录和管理客户信息、需求和交互历…