首页 > 其他分享 >P1739 表达式括号匹配

P1739 表达式括号匹配

时间:2023-03-09 12:55:25浏览次数:34  
标签:ok 括号 NO 样例 P1739 include 表达式

P1739 表达式括号匹配

表达式括号匹配

题目描述

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

输入格式

一行:表达式。

输出格式

一行:YESNO

样例 #1

样例输入 #1

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

样例输出 #1

YES

样例 #2

样例输入 #2

(25+x)*(a*(a+b+b)@

样例输出 #2

NO

提示

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

分析

例如 ( ( ) ) ( ) 是可以的。 ( ) ) ( ( ) 却是不可以。

括号是左右对称的,如果前一半中多了左,后一半中可以用右来覆盖,但如果前一半中多了右的话,就缺少了左,就不能组成括号,这就是为什么可以多左但不能多右,这也就是ok变量为什么不能<0。

提交答案

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>//头文件
using namespace std;//不加这个会出错(告诉一些新人的,大佬勿喷)
int ok=0;//状态的变量(大佬千万别改bool)
char a;//记录字符
int i=0;//之后的特判要用
int main()
{
    for (;;i++)//很无脑对不对,但是很有用
    {
        a=getchar();//读入
        if (i==0&&a==')') {printf ("NO");return 0;}//特判:第一个为‘)’,结束,不对,自己想想看
        if (a=='(') ok++;//是左括号就++
        if (a==')') ok--;//是有括号就--
        if (ok<0) {printf ("NO");return 0;}//特判:多了右括号,结束(多了左没事,但不可以多右,想想看)
        if (a=='@') {if (!ok) printf ("YES");else printf ("NO");return 0;}
//特判无效:比较ok是不是为0(是0表示左右括号都一样多,结束),只要ok不等于0,左右括号的数目就不相等,就是无效的,输出NO
    }
}

标签:ok,括号,NO,样例,P1739,include,表达式
From: https://www.cnblogs.com/bujidao1128/p/17197966.html

相关文章

  • 通用表表达式
    通用表表达式通用表表达式(CommonTableExpression、CTE)是一个临时的查询结果或者临时表,可以在其他SELECT、INSERT、UPDATE以及DELETE语句中使用。通用表表达式只在......
  • python 提取列表元素打印不带中括号
    目录python提取列表元素打印不带中括号python提取列表元素打印不带中括号有个需求,需要对python3的列表切片,获取得到用户名后和手动输入的用户名比对,如果一致就打印true......
  • 正则表达式
    正则表达式正则表达式解释:正则表达式(英语:regularExpression,常简写为regex、regexp或RE),又称正则表达式、正则表示法、规则表达式、常规表示法,是计算机的一个概念。......
  • 实验1 C语言开发环境使用和数据类型、运算符、表达式
    //打印一个字符小人#include<stdio.h>intmain(){printf("o\n");printf("<H>\n");printf("II\n");return0;}#include<stdio.h>......
  • 记录一下C#中使用正则表达式
    privatestaticvoidMain(string[]arg){vartext="";//文本读取器using(TextReaderreader=newStreamR......
  • for循环原理补充、生成器对象、yield冷门用法、生成器表达式的面试题、常见内置函数
    目录一、for循环原理补充二、生成器对象(1)、自定义生成器对标range功能(一个参数两个参数三个参数迭代器对象)三、yield冷门用法(1)、yield与return的对比四、生成器表......
  • 递归表达式系列
    递归函数:什么是递归函数:就是直接或者间接的调用自己"""递归:1.递推逐层寻找答案2.回溯根据最终的答案推导出最原始的答案3.递归函......
  • 常用正则表达式
     1、数字1、数字:^[0-9]*$2、n位的数字:^\d{n}$3、至少n位的数字:^\d{n,}$4、m-n位的数字:^\d{m,n}$5、零和非零开头的数字:^(0|[1-9][0-9]*)$6、非零开头的最多......
  • C# lambda 表达式
    C#lambda表达式lambda函数是一个小的匿名函数。lambda函数可以接受任意数量的参数,但只能具有一个表达式。本文主要介绍C#lambda表达式。 1、C#lambda表......
  • C# 正则表达式(Regex)
    C#正则表达式(Regex) 正则表达式是形成搜索模式的一系列字符。正则表达式可用于检查字符串是否包含指定的搜索模式。也可以进行字符串的替换和提取。本文主要......