zoukankan      html  css  js  c++  java
  • 洛谷 P1739 表达式括号匹配

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

    题目描述

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

    输入输出格式

    输入格式:

    一行:表达式

    输出格式:

    一行:“YES” 或“NO”

    输入输出样例

    输入样例#1: 
    2*(x+y)/(1-x)@

    输出样例#1:

    YES
    输入样例#2: 
    (25+x)*(a*(a+b+b)@
    
    输出样例#2: 
    NO

    说明

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

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

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

    下面用栈来处理:

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

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

    #include <stdio.h>
    int main()
    {
        char t;
        int i=0;
        while(scanf("%c",&t)!=EOF)
        {
            if(t=='(') i++;
            else if(t==')')  
            {
                if(i<=0) {printf("NO"); return 0;}
                else i--;
            }
        }
        if(i==0) printf("YES");
        else printf("NO");
        return 0;
    }
  • 相关阅读:
    win2K/win2003终端服务器超出最大允许连接数解决之道
    DOM与SAX读取xml文件例程
    ubuntu安装配置telnet
    SCTP 简介
    groovy 脚本中文乱码问题解决
    编码问题研究
    gvim支持utf8
    ctags使用方法
    我家猫病了。。
    小朋友搞笑造句
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/10585080.html
Copyright © 2011-2022 走看看