题目链接https://www.luogu.org/problemnew/show/P1739

题目描述

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

输入输出格式

输入格式:

一行:表达式

输出格式:

一行:“YES” 或“NO”

输入输出样例

输入样例#1:

  1. 2*(x+y)/(1-x)@

输出样例#1:

  1. YES
输入样例#2:

  1. (25+x)*(a*(a+b+b)@
输出样例#2:

  1. NO

说明

表达式长度小于255,左圆括号少于20个

分析:可以在扫描字符串的过程中,用栈来存储左括号,遇到右括号则将栈顶的左括号弹出栈。直接模拟即可。

或者可以记录扫描过程中遇到的尚未被右括号抵消掉的左括号还剩下多少个。就是:扫描时遇到左括号则累计增加左括号个数,遇到右括号则将左括号累计个数减掉1个。

下面用栈来处理:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int s[];//栈
  5. char a[];//表达式
  6. int i,j,flag=;//flag==0表示括号匹配,否则不匹配
  7. scanf("%s",a);
  8.  
  9. j=-;
  10. for(i=;a[i]!='@';i++)
  11. {
  12. if(a[i]=='(')
  13. {
  14. s[++j]=i;//遇到左括号则将下标入栈
  15. }
  16. else if(a[i]==')')
  17. {
  18. if(j>=)//栈不为空
  19. j--;
  20. else
  21. {
  22. flag=;//匹配失败
  23. break;
  24. }
  25. }
  26. }
  27. if(j>=) //栈不为空
  28. flag=;
  29. if(flag==)
  30. printf("NO\n");
  31. else
  32. printf("YES\n");
  33. return ;
  34. }

下面是刘俊东童鞋写的一段代码,就是统计目前剩余未被抵消掉的括号

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char t;
  5. int i=;
  6. while(scanf("%c",&t)!=EOF)
  7. {
  8. if(t=='(') i++;
  9. else if(t==')')
  10. {
  11. if(i<=) {printf("NO"); return ;}
  12. else i--;
  13. }
  14. }
  15. if(i==) printf("YES");
  16. else printf("NO");
  17. return ;
  18. }

洛谷 P1739 表达式括号匹配的更多相关文章

  1. 洛谷 P1739 表达式括号匹配【STL/stack/模拟】

    题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@"作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返 ...

  2. 洛谷P1739 表达式括号匹配

    题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@"作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返 ...

  3. 洛谷 - P1739 - 表达式括号匹配 - 模拟 - 栈

    https://www.luogu.org/problemnew/show/P1739 虽然应该是用栈的……但是直接模拟就可以了. #include<bits/stdc++.h> usin ...

  4. (栈 注意格式)P1739 表达式括号匹配 洛谷

    题目描述 假设一个表达式有英文字母(小写).运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”:否则返 ...

  5. P1739 表达式括号匹配

    题目描述 假设一个表达式有英文字母(小写).运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”:否则返 ...

  6. luoguP1739 表达式括号匹配 x

    P1739 表达式括号匹配 题目描述 假设一个表达式有英文字母(小写).运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹 ...

  7. 2019.06.17课件:[洛谷P1310]表达式的值 题解

    P1310 表达式的值 题目描述 给你一个带括号的布尔表达式,其中+表示或操作|,*表示与操作&,先算*再算+.但是待操作的数字(布尔值)不输入. 求能使最终整个式子的值为0的方案数. 题外话 ...

  8. 洛谷P1310 表达式的值 题解 栈/后缀表达式的应用

    题目链接:https://www.luogu.org/problem/P1310 本题涉及算法:栈.前缀表达式转后缀表达式,动态规划思想. 这道题目我思考了好长时间,第一时间让我做的话我也做不出来. ...

  9. 栈的应用:表达式括号匹配检测(C)

    问题说明: 假设数学表达式中允许包含两种括号:圆括号"()"和方括号"[]",嵌套顺序任意. 正确的嵌套模式:( [ ] ( ) ).[ ( [ ] [ ] ) ...

随机推荐

  1. API接口设计,rest,soap

    REST之前的重要协议SOAP rest(简单理解风格.约束.设计理念) rest之前是SOAP:SOAP Web API采用RPC风格,它采用面向功能的架构,所以我们在设计SOAP Web API的 ...

  2. linux下执行.sh文件的方法和语法

    linux下执行.sh文件的方法    .sh文件就是文本文件,如果要执行,需要使用chmod a+x xxx.sh来给可执行权限.       是bash脚本么   可以用touch test.sh ...

  3. 003.MongoDB主要概念

    一 对比关系 SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table collection 数据库表/集合 row document 数据记录行 ...

  4. spring注解工具类AnnotatedElementUtils和AnnotationUtils

    一.前言 spring为开发人员提供了两个搜索注解的工具类,分别是AnnotatedElementUtils和AnnotationUtils.在使用的时候,总是傻傻分不清,什么情况下使用哪一个.于是我 ...

  5. linux 学习笔记三

    用户管理篇章 useradd 建立用户 一般用法 #useradd mysql 含义 创建 mysql用户 特殊用户 > #useradd -d /usr/cjh -m cjh 含义 创建 cj ...

  6. 页面中去除浮动 clear:both

    今天写代码发现一个很奇怪的问题,发现上面的div加浮动(不管是否包含div)以后对下面div的浮动有所影响,通过去除浮动,搞定: 只需要在受影响的div中的样式中,加入clear:both即可

  7. SpringBoot+Jpa+MySql学习

    上一篇介绍了springboot简单整合mybatis的教程.这一篇是介绍springboot简单整合jpa的教程. 由于jpa的功能强大,后续会继续写关于jpa的介绍已经使用,本文只是简单介绍一下它 ...

  8. [OC] Delegate的使用

    建立两个页面 A 和 B,我们假设他们的文件名为ControllerA,ControllerB 由A页面,点击跳转到B页面.在B页面中,进行一些操作,并得到一个值,并将这个值传回给A页面,并在A页面上 ...

  9. Hexo 搭建博客 本地运行 常见报错及解决办法

    作为一名在hexo方面的新手,我在使用hexo编辑文档时遇到了很多问题,hexo generate编译的时候遇到了各种错误. 在此将这些错误及其解决方案记录下来,以便日后查证之用,同时,也可给各位在遇 ...

  10. sql 多行转多列,多行转一列合并数据,列转行

    下面又是一种详解: