平衡的括号[UVA-673]
UVA673 Parentheses Balance
书上习题6-1,题比较简单,主要是使用栈这个“后进先出”的数据结构。因为平衡的括号,必然可以在左半括号进行push而右半括号进行pop,当到达序列末尾而栈不空,显然不满足题意了。
抛开题目说几点内容:一是之前看王爽的《汇编语言》,对栈的pop操作有些误解。在汇编语言中(8086包括现在的IA32、X86-64指令),pop指令有一个操作数,表示将栈顶的元素出栈后所放置的内存单元地址;而在数据结构的栈中,pop操作只是将栈顶元素出栈,直接就丢了。我一开始是用汇编语言的栈去理解,总是以为pop必然可以返回栈顶元素。事实上应该先用top操作去获得栈顶元素,而后用pop弹出栈顶元素。push操作则比较类似了,都带有一个操作数,都表示要压栈的元素。二是本题的描述使用了离散数学课程中的递归定义,[(])显然是不符合这个递归定义的,因为假设[]合法,两个中括号夹着的的A=(必然也需要合法,而实际上只有半个括号,是不合法的,与假设矛盾。除此之外,gets()函数需要考虑之前的空行,不然读入的是包含换行符的空串。
C++实现如下:
1 #include<iostream> 2 #include<cstdio> 3 #include<stack> 4 #include<cstring> 5 using namespace std; 6 int main() 7 { 8 stack<char> s; 9 char buf[200]; 10 int cases; 11 cin >> cases; 12 getchar(); 13 while (1) 14 { 15 RESTART: 16 if (!cases--) 17 break; 18 while (!s.empty()) 19 s.pop(); 20 gets(buf); 21 if (strcmp(buf, "\n") == 0) 22 { 23 printf("Yes\n"); 24 continue; 25 } 26 for (int i = 0; buf[i] != 0; i++) 27 { 28 switch (buf[i]) 29 { 30 case '(': 31 case '[': 32 s.push(buf[i]); 33 break; 34 case ')': 35 if (s.empty() || s.top() != '(') 36 { 37 printf("No\n"); 38 goto RESTART; 39 } 40 else 41 s.pop(); 42 break; 43 case ']': 44 if (s.empty() || s.top() != '[') 45 { 46 printf("No\n"); 47 goto RESTART; 48 } 49 else 50 s.pop(); 51 break; 52 } 53 } 54 if (s.empty()) 55 printf("Yes\n"); 56 else 57 printf("No\n"); 58 } 59 return 0; 60 }
转载于:https://www.cnblogs.com/ggggg63/p/6696560.html
平衡的括号[UVA-673]相关推荐
- Uva673 平衡的括号
Uva 673平衡的括号 题目描述: 思路: 就是普通的括号匹配问题,用栈来模拟操作.需要注意的地方是,有输入为空的情况,所以不要用cin来读取,而是用getline. 代码: #include &l ...
- Parentheses Balance UVA - 673
Parentheses Balance UVA - 673 在网上看了很多题解,没看到用map做的(可能是我没找到吧).其实用map可以少用很多if语句! #include<cstdio> ...
- UVA 673-Parentheses Balance
UVA 673-Parentheses Balance 题目大意:1 A =[]或()算正确 2 A为BC(B,C都是正确的话)算正确 3 A = [M]或(M)(M为正确的话)算正确 解题思路:用栈 ...
- 习题6-1 平衡的括号(Parentheses Balence,UVa 673)
原题链接:https://vjudge.net/problem/UVA-673 分类:栈 备注:水题 分析:简单的大学课本里都有的认识栈的第一步. #include<iostream> # ...
- UVA - 673 (括号的匹配)
有两种方法: 第一种:数组 思想:观察可匹配成功的字符串可知: 找到第一个i为出括号(')',']')那么与它相匹配的进括号一定是在它左边i-1(最近的) 如果不是第一个出括号,与它相匹配的进括号一定 ...
- B - Parentheses Balance (UVA - 673)
- 题目大意 给出两个字符()[],然后根据给的条件来判断. - 解题思路 根据给的三个条件,然后利用栈来处理,对于暂时没有后括号匹配的前括号压入栈,遇到后括号时看栈顶的前括号与其是否匹配,如果匹配则 ...
- uva 673 Parentheses Balance
原题: You are given a string consisting of parentheses () and []. A string of this type is said to be ...
- Parentheses Balance UVA - 673(模拟)
题目大意:类似于括号匹配. 思路:用栈简单模拟就行了,关键是怎么读入空格. 用getline(cin,str),就行了,如果读入的是空格怎么判断呢,只需要if(str[0]=='\0'),那么为什么不 ...
- 【紫书】UVA673 平衡的括号 Parentheses Balance
题目提交点 UVA673 思路: 运用栈的思想,遇到'(' 和 ']' 入栈,遇到'('.'['出栈. 代码: #include<iostream> #include<stack&g ...
最新文章
- Java学习笔记45:Java 线程与主线程之间的变量关系
- 紘康单片机_紘康HY11P14 - SOC芯片 - 产品展示 - SOC芯片_IC芯片pcba开发_深圳市联泰威电子有限公司...
- SVM算法实现光学字符识别
- 你必须懂也可以懂的微服务系列三:服务调用
- python工程师需要考什么证_考垃圾处理清运工程师证哪里颁发的今年的考试时间即将告知...
- 微课|中学生可以这样学Python(例9.1):Excel导入SQLite(2)
- 一键清理Quartus工程编译垃圾
- linux计划任务与日志管理(日志分割/切割)
- bootstrap 模态框无法使用_22 模态框Modal教程(plotly Dash Bootstrap版)
- mysql innobackupex 备份及恢复
- linux常用命令和关闭防火墙
- 全科初高中智能学习机器人_智能学习机器人推荐,阿尔法蛋大蛋2.0学习内容智能推荐...
- 企业机房升温-谁之过?
- 修复计算机u盘,u盘损坏怎么修复 u盘损坏修复方法
- [全网首发]坚果Pro3 root教程 Magisk
- 植物大战僵尸辅助C/C++版
- 万字拆解伊利:84天从0到千万GMV,传统巨头在抖音电商的“快与慢”
- 百度搜索引擎结果网址参数搜索历史记录(rsv_sug)
- CTFshow-萌新
- JQuery 判断访问的浏览器是pc还是手机
热门文章
- Linux进阶之路————进程与服务管理
- python安装lap_一个python脚本解决安装mq的依赖问题
- pitr 原理_PostgreSQL基于时间点恢复(PITR)
- 没有icon_ICON设计干货来啦~
- ❤️六W字《计算机基础知识》(三)(建议收藏)❤️
- 2017年网络统考计算机成绩,2017年12月江苏省成人计算机基础统考成绩查询
- Node.js Event loop 图解
- 命令行安装Pillow
- 使用foreach循环遍历Collection集合
- python display函数_【python】pandas display选项