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]相关推荐

  1. Uva673 平衡的括号

    Uva 673平衡的括号 题目描述: 思路: 就是普通的括号匹配问题,用栈来模拟操作.需要注意的地方是,有输入为空的情况,所以不要用cin来读取,而是用getline. 代码: #include &l ...

  2. Parentheses Balance UVA - 673

    Parentheses Balance UVA - 673 在网上看了很多题解,没看到用map做的(可能是我没找到吧).其实用map可以少用很多if语句! #include<cstdio> ...

  3. UVA 673-Parentheses Balance

    UVA 673-Parentheses Balance 题目大意:1 A =[]或()算正确 2 A为BC(B,C都是正确的话)算正确 3 A = [M]或(M)(M为正确的话)算正确 解题思路:用栈 ...

  4. 习题6-1 平衡的括号(Parentheses Balence,UVa 673)

    原题链接:https://vjudge.net/problem/UVA-673 分类:栈 备注:水题 分析:简单的大学课本里都有的认识栈的第一步. #include<iostream> # ...

  5. UVA - 673 (括号的匹配)

    有两种方法: 第一种:数组 思想:观察可匹配成功的字符串可知: 找到第一个i为出括号(')',']')那么与它相匹配的进括号一定是在它左边i-1(最近的) 如果不是第一个出括号,与它相匹配的进括号一定 ...

  6. B - Parentheses Balance (UVA - 673)

    - 题目大意 给出两个字符()[],然后根据给的条件来判断. - 解题思路 根据给的三个条件,然后利用栈来处理,对于暂时没有后括号匹配的前括号压入栈,遇到后括号时看栈顶的前括号与其是否匹配,如果匹配则 ...

  7. uva 673 Parentheses Balance

    原题: You are given a string consisting of parentheses () and []. A string of this type is said to be ...

  8. Parentheses Balance UVA - 673(模拟)

    题目大意:类似于括号匹配. 思路:用栈简单模拟就行了,关键是怎么读入空格. 用getline(cin,str),就行了,如果读入的是空格怎么判断呢,只需要if(str[0]=='\0'),那么为什么不 ...

  9. 【紫书】UVA673 平衡的括号 Parentheses Balance

    题目提交点 UVA673 思路: 运用栈的思想,遇到'(' 和 ']' 入栈,遇到'('.'['出栈. 代码: #include<iostream> #include<stack&g ...

最新文章

  1. Java学习笔记45:Java 线程与主线程之间的变量关系
  2. 紘康单片机_紘康HY11P14 - SOC芯片 - 产品展示 - SOC芯片_IC芯片pcba开发_深圳市联泰威电子有限公司...
  3. SVM算法实现光学字符识别
  4. 你必须懂也可以懂的微服务系列三:服务调用
  5. python工程师需要考什么证_考垃圾处理清运工程师证哪里颁发的今年的考试时间即将告知...
  6. 微课|中学生可以这样学Python(例9.1):Excel导入SQLite(2)
  7. 一键清理Quartus工程编译垃圾
  8. linux计划任务与日志管理(日志分割/切割)
  9. bootstrap 模态框无法使用_22 模态框Modal教程(plotly Dash Bootstrap版)
  10. mysql innobackupex 备份及恢复
  11. linux常用命令和关闭防火墙
  12. 全科初高中智能学习机器人_智能学习机器人推荐,阿尔法蛋大蛋2.0学习内容智能推荐...
  13. 企业机房升温-谁之过?
  14. 修复计算机u盘,u盘损坏怎么修复 u盘损坏修复方法
  15. [全网首发]坚果Pro3 root教程 Magisk
  16. 植物大战僵尸辅助C/C++版
  17. 万字拆解伊利:84天从0到千万GMV,传统巨头在抖音电商的“快与慢”
  18. 百度搜索引擎结果网址参数搜索历史记录(rsv_sug)
  19. CTFshow-萌新
  20. JQuery 判断访问的浏览器是pc还是手机

热门文章

  1. Linux进阶之路————进程与服务管理
  2. python安装lap_一个python脚本解决安装mq的依赖问题
  3. pitr 原理_PostgreSQL基于时间点恢复(PITR)
  4. 没有icon_ICON设计干货来啦~
  5. ❤️六W字《计算机基础知识》(三)(建议收藏)❤️
  6. 2017年网络统考计算机成绩,2017年12月江苏省成人计算机基础统考成绩查询
  7. Node.js Event loop 图解
  8. 命令行安装Pillow
  9. 使用foreach循环遍历Collection集合
  10. python display函数_【python】pandas display选项