有关栈的练习

栈练习1

给定一个栈(初始为空,元素类型为整数,且小于等于 109),只有两个操作:入栈和出栈。先给出这些操作,请输出最终栈的栈顶元素。
操作解释:
1 表示将一个数据元素入栈;
2 表示出栈。保证出栈的时候栈里数据不为空。

输入

第一行,一个数字 N,表示操作个数。1≤N≤10^5
其后 N 行,表示 N 个操作(如果是入栈则后面还会有一个入栈元素)。
具体见样例(输入保证栈空时不会出栈)。

输出

最终栈顶元素,若最终栈空,输出”impossible!”(不含引号)。

样例输入
3
1 2
1 9
2
样例输出
2
代码:
#include<bits/stdc++.h>
using namespace std;
stack<int>a;
int n,x,y;
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>x>>y;if(x==2){a.pop();}else if(x==1){a.push(y);}}if(!a.empty())cout<<a.top();else cout<<"impossible!";return 0;
}

 栈练习2

此题与相比栈练习1改了 2 处:1、加强了数据,2、不保证栈空时不会出栈。
给定一个栈(初始为空,元素类型为整数,且小于等于 109),只有两个操作:入栈和出栈。先给出这些操作,请输出最终栈的栈顶元素。
操作解释:
1 表示将一个元素入栈;
2 表示出栈。出栈的时候栈可能为空。

输入

第一行,一个数字 N,表示操作个数。1≤N≤105。
其后 N 行,表示 N 个操作(如果是入栈则后面还会有一个入栈元素)。
具体见样例(输入不保证栈空时不会出栈)。

输出

最终栈顶元素。若最终栈空,或每次栈空时有出栈操作,输出”impossible!”(不含引号)。

样例输入
3
1 2
2
2
样例输出
impossible!
impossible!
代码:
#include<bits/stdc++.h>
using namespace std;
long long n,a,b;
stack<long long>s;
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>a;if(a==1){cin>>b;s.push(b);}if(a==2){if(!s.empty())s.pop();else cout<<"impossible!"<<endl;}}if(!s.empty())cout<<s.top();else cout<<"impossible!";return 0;
}

 栈练习3

比起栈练习1,本题加了另外一个操作,访问栈顶元素(编号 3,保证访问栈顶元素时或出栈时栈不为空),现在给出这 N 次操作,输出结果。

输入

第一行,一个数字 N,表示操作个数。1≤N≤105。
其后 N 行,表示 N 个操作:
1 入栈;入栈元素大小不会超过 109。
2 出栈;
3 访问栈顶。

输出

K行(K为中间询问的次数)每次的结果

样例输入
6
1  7
3
2
1  9
1  7
3
样例输出
7
7
代码:
#include<bits/stdc++.h>
using namespace std;
long long n,a,b;
stack<long long>s;
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>a;if(a==1){cin>>b;s.push(b);}if(a==2)s.pop();if(a==3)cout<<s.top()<<endl;}return 0;
}

栈练习4

比起栈练习3,本题不保证访问栈顶元素时或出栈时栈不为空,现在给出这 N 此操作,输出结果。

输入

第一行,一个数字 N,表示操作个数。1≤N≤105。
其后 N 行,表示 N 个操作:
1 入栈;入栈元素大小不会超过 109。
2 出栈;
3 访问栈顶。

输出

若干行每次的结果。
对于2操作。如果栈为空,每次操作输出 impossible!。
对于3操作。如果栈为空,每次操作输出 impossible!。如果栈不为空,输出对应的栈顶数据

样例输入
6
1  7
3
2
2
1  9
3
样例输出
7
impossible!
9
 代码:
#include<bits/stdc++.h>
using namespace std;
long long n,a,b;
stack<long long>s;
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>a;if(a==1){cin>>b;s.push(b);}if(a==2){if(!s.empty())s.pop();else cout<<"impossible!"<<endl;}if(a==3){if(!s.empty())cout<<s.top()<<endl;else cout<<"impossible!"<<endl;}}return 0;
}

洗盘子

晨晨和涵涵将联手洗掉 N (1<= N <= 10,000) 个脏盘子。晨晨洗,涵涵来擦干它们。每个盘子有一个指 定的编号,范围 1..N。开始,所有盘子按顺序排列在栈中(只能竖着叠放盘子的盒子), 1 号盘子在顶端, N 号盘子在底端。 
晨晨会先洗一些盘子,然后放在洗过的盘子栈里(这样与原来的顺序刚好颠倒)。然后,或者她洗别 的盘子,或者涵涵擦干她已经洗好的部分或全部盘子,放在擦干的盘子栈里。这样直到所有盘子洗完擦干 后放置的顺序是什么?
 



 

输入

第一行:一个整数 N,表示盘子的数量。 
接下来若干行:每一行两个整数,第一个整数为 1 表示洗盘子,为 2 表示擦盘子,第二个整数表示盘子数量

输出

共 N 行:擦干后盘子从顶端到底端的顺序

样例输入
5
1 3
2 2
1 2
2 3
样例输出
1
4
5
2
3
代码:
#include<bits/stdc++.h>
using namespace std;
long long n,x,y,bj;
stack<long long>a;
stack<long long>b;
stack<long long>c;
int main(){cin>>n;for(int i=n;i>=1;i--)a.push(i);while(cin>>x>>y){if(x==1){while(y>0){b.push(a.top());a.pop();y--;}}else{while(y>0){c.push(b.top());b.pop();y--;bj++;}}if(bj==n)break;}while(!c.empty()){cout<<c.top()<<endl;c.pop();}return 0;
}

 程序员输入问题

程序员输入程序出现差错时,可以采取以下的补救措施:按错了一个键时,可以补按一个退格符“#”,以表示前一个字符无效;发现当前一行有错,可以按一个退行符“@”,以表示“@”与前一个换行符之间的字符全部无效。

输入

输入一行字符,个数不超过100。

输出

输出一行字符,表示实际有效字符。

样例输入
          sdfosif@for (ii#=1,#; i<.#=8; i+++#);
样例输出
for (i=1; i<=8; i++);
提示

因为输入只有一行,所以题目所讲的遇到@退行符就是清空当前栈里面所有元素

代码:
#include<bits/stdc++.h>
using namespace std;
string s,s1;
stack<char>a;
int main(){getline(cin,s);for(int i=0;i<s.size();i++){if(s[i]=='#')a.pop();if(s[i]=='@'){while(!a.empty()){a.pop();}}if(s[i]!='#'&&s[i]!='@'){a.push(s[i]);}}while(!a.empty()){s1=a.top()+s1;a.pop();}cout<<s1;return 0;
}

表达式括号匹配

假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。

输入

一行数据,即表达式。

输出

一行,即“YES” 或“NO”。

样例输入
2*(x+y)/(1-x)@
样例输出
YES
代码:
#include<bits/stdc++.h>
using namespace std;
stack<char>a;
int main()
{char ch;cin>>ch;while(ch!='@'){if(ch=='(')a.push(ch);else if(ch==')' && a.empty()){cout<<"NO";return 0;}else if(ch==')')a.pop();cin>>ch;}if(a.empty())cout<<"YES"; else cout<<"NO";return 0;
}

 括弧匹配检验

假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错误的匹配。
现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配?
输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出 “OK” ,不匹配就输出“Wrong”。输入一个字符串:[([][])],输出:OK。

输入

输入仅一行字符(字符个数小于255)。

输出

匹配就输出 “OK” ,不匹配就输出“Wrong”。

样例输入
[(])
样例输出
Wrong
代码:
#include<bits/stdc++.h>
using namespace std;
int top;
bool f;
int main(){string s; char a[3000];cin>>s;int l=s.size(),n,m;for(int i=0;i<l;i++){if(s[i]=='('||s[i]==')')n++;if(s[i]=='['||s[i]==']')m++;if(s[i]=='('||s[i]=='[')a[++top]=s[i];if(s[i]==')'){if(a[top]=='(')top--;else{f=1;break;}}if(s[i]==']'){if(a[top]=='[')top--;else{f=1;break;}}}if(n%2==1||m%2==1){cout<<"Wrong";return 0;}if(f==1)cout<<"Wrong";else cout<<"OK";return 0;
}

 符号匹配

假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错误的匹配。
现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配?
输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出 “YES” ,不匹配就输出“NO”。输入一个字符串:[([][])],输出:YES。

输入

输入包括多组测试数据,每组数据是一个字符串,字符串只包含“()[]”等字符。

输出

对于每组数据输出“YES”表示当前字符串中的括号是匹配的,否则输出“NO”(不包括引号)

样例输入
()
([)]
样例输出
YES
NO
代码:
#include<bits/stdc++.h>
using namespace std;
string s; 
int main(){while(cin>>s){int top=0;bool f=0;char a[3000];for(int i=0;i<=2999;i++)a[i]=' ';int l=s.size(),n=0,m=0;for(int i=0;i<l;i++){if(s[i]=='('||s[i]==')')n++;if(s[i]=='['||s[i]==']')m++;if(s[i]=='('||s[i]=='[')a[++top]=s[i];if(s[i]==')'){if(a[top]=='(')top--;else{f=1;break;}}if(s[i]==']'){if(a[top]=='[')top--;else{f=1;break;}}}if(n%2==1||m%2==1){cout<<"NO\n";continue;}if(f==1)cout<<"NO\n";else cout<<"YES\n";}return 0;
}

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

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

相关文章

书生浦语训练营第2期-第5节作业

一、基础作业 1.1 LMDeploy环境部署 &#xff08;1&#xff09;创建conda环境 studio-conda -t lmdeploy -o pytorch-2.1.2 &#xff08;2&#xff09;安装Lmdeploy 激活刚刚创建的虚拟环境。 conda activate lmdeploy 安装0.3.0版本的lmdeploy。 pip install lmdeploy[all]0…

达梦(DM)数据库表索引

达梦DM数据库表索引 表索引索引准则其他准则 创建索引显式地创建索引其他创建索引语句 使用索引重建索引删除索引 表索引 达梦数据库表索引相关内容比较多&#xff0c;常用的可能也就固定的一些&#xff0c;这里主要说一下常用的索引&#xff0c;从物理存储角度进行分类&#…

在线测径仪的六类测头组合形式!哪种适合你?

在线测径仪&#xff0c;这一现代工业的精密仪器&#xff0c;犹如一位技艺高超的工匠&#xff0c;以其卓越的性能和精准度&#xff0c;为工业生产提供了坚实的保障。它的出现&#xff0c;不仅提高了生产效率&#xff0c;更保证了产品质量&#xff0c;为企业的可持续发展注入了强…

基于JavaWeb开发的springboot网约车智能接单规划小程序[附源码]

基于JavaWeb开发的springboot网约车智能接单规划小程序[附源码] &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种…

SLICEM是如何将查找表配置为分布式RAM/移位寄存器的

1.首先说SliceM和SliceL如何配置为ROM的 一个SLICE包含4个六输入查找表&#xff0c;因此每个查找表就能存储64bit的数据&#xff0c;要实现128bit的ROM&#xff0c;只需要通过两个LUT就可实现&#xff0c;具体如下表: 2.如何配置成为分布式RAM SLICEM中的LUT如下图&#xff…

Excel模板导入、导出工具类

1.引入maven依赖&#xff0c;利用hutool的excel读取 Hutool-poi对excel读取、写入 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency> <depen…

Linux之安装Nginx

目录 传送门前言一、快速安装二、反向代理语法1、基本语法2、location语法1. 基本语法2. 匹配规则3. 修饰符4. 权重5. 嵌套location6. 其他指令7.案例 三、配置反向代理 传送门 SpringMVC的源码解析&#xff08;精品&#xff09; Spring6的源码解析&#xff08;精品&#xff0…

Java 海报-基于Graphics2D 实现个人头像的圆形裁剪

效果&#xff1a; 代码&#xff1a; private static BufferedImage resizeAndClipToCircle(BufferedImage image, int size) {// 缩小图片BufferedImage resizedImage new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);Graphics2D g2d resizedImage.createGraphi…

5.组合与继承

1.面向对象 在C中&#xff0c;面向对象&#xff08;Object-Oriented&#xff09;是一种程序设计范式&#xff0c;它使用“对象”来设计应用程序和软件。面向对象编程&#xff08;OOP&#xff09;的核心概念包括类&#xff08;Class&#xff09;、对象&#xff08;Object&#x…

方便快捷!使用Roboflow进行数据增强(附详细操作)

最近使用自定义数据集训练yolov8模型的时候突然发现一件很令人头疼的事情。那就是&#xff0c;数据集中图片太少了。于是想通过数据增强的方法扩大数据集。 通过查阅资料发现&#xff0c;大部分人都是用python中的imgaug库进行图像处理&#xff1b;这种方法最大的不便就是需要转…

如何通过需求跟踪矩阵加强需求管理?

需求跟踪矩阵是强化需求管理的有效工具&#xff0c;它能直观地展示需求与项目各阶段产出物之间的映射关系&#xff0c;确保每个需求从提出到最终实现都得到严密的跟踪与控制&#xff0c;从而提高需求质量和开发效率&#xff0c;保障项目顺利交付。 如果没有需求跟踪矩阵&#x…

【Elasticsearch】Elasticsearch 从入门到精通(二):基础使用

《Elasticsearch 从入门到精通》共包含以下 2 2 2 篇文章&#xff1a; Elasticsearch 从入门到精通&#xff08;一&#xff09;&#xff1a;基本介绍Elasticsearch 从入门到精通&#xff08;二&#xff09;&#xff1a;基础使用 &#x1f60a; 如果您觉得这篇文章有用 ✔️ 的…

用Python将原始边列表转换为邻接矩阵

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在图论和网络分析中&#xff0c;图是一种非常重要的数据结构&#xff0c;它由节点&#xff…

【AI开发:音频】一、GPT-SoVITS整合工具包的部署问题解决(GPU版)

前言 目前GPT-SoVITS的合成效果比较不错&#xff0c;相比较其他厂商的产品要规整的多。众多厂家中也是国内使用最多的一款了&#xff0c;并且这个整合包里携带了&#xff0c;除背景音、切割、训练、微调、合成、低成本合成等一些列完整的工具&#xff0c;也可以作为API进行使用…

StartAI智能绘图软件出现“缺少Python运行库”怎么办?

StartAI做为一款国产AI界的新秀&#xff0c;是一款贴合AIGC新手的智能绘图软件。新手安装遇见“缺少Python运行库”怎么办”&#xff1f;小编一招搞定~ 解决方法&#xff1a;手动下载【resource文件】&#xff0c;将文件添加到安装目录下。 点击链接进行手动下载噢~ 确保 Star…

React首次加载渲染2次的问题

在开发React项目的时候&#xff0c;发现useEffect会调用2次的情况&#xff0c;依赖数组明明没有变化&#xff0c;怎么会调用2次&#xff1f;百思不得其解&#xff0c;依赖没变化的话&#xff0c;那肯定是整个组件重渲染了。 最最简单的代码如下&#xff1a; const container …

【抽代复习笔记】14-群(八):变换群中的旋转、位似、平移变换群

定理1&#xff1a;集合A上的所有一一变换的集合G关于变换的乘法&#xff08;复合&#xff09;作成群。 证&#xff1a;首先&#xff0c;恒等变换ɛ:A→A(ɛ(x) x)是集合A上的一一变换&#xff0c;所以ɛ∈G&#xff0c;即G≠∅&#xff1b; ①对任意的f,g∈G&#xff0c;由映…

AI人工智能培训老师叶梓:大数据治理的关键工具:开源数据血缘分析系统

在大数据时代&#xff0c;数据的产生和传播速度日益加快&#xff0c;数据之间的关系也变得日益复杂。为了更好地管理和理解数据之间的关系&#xff0c;数据血缘分析系统应运而生。本文将介绍几个开源的数据血缘分析系统&#xff0c;它们在数据治理、数据质量管理和数据隐私保护…

ragflow 大模型RAG知识库使用案例

参考: https://github.com/infiniflow/ragflow/blob/main/README_zh.md 支持丰富的文件类型,包括 Word 文档、PPT、excel 表格、txt 文件、图片、PDF、影印件、复印件、结构化数据, 网页等。 运行步骤: 1、确保 vm.max_map_count 不小于 262144 【更多】: 如需确认 vm.…

ThingsBoard服务端使用RPC通过网关给设备发送消息

一、概述 1、发送服务器端网关RPC 二、案例&#xff1a; 1、建立设备与网关之间的通讯 2、查看设备和网关是否在线状态啊 3、通过 仪表盘&#xff0c;创建设备A的模拟RPC调用的窗口链接 4、在客户端的网关设备上订阅RPC网关的主题信息 5、通过服务端的窗口&#xff0c;发…