洛谷 P1739 表达式括号匹配
题目链接https://www.luogu.org/problemnew/show/P1739
题目描述
假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。
输入输出格式
输入格式:
一行:表达式
输出格式:
一行:“YES” 或“NO”
输入输出样例
2*(x+y)/(1-x)@
输出样例#1:
YES
(25+x)*(a*(a+b+b)@
NO
说明
表达式长度小于255,左圆括号少于20个
分析:可以在扫描字符串的过程中,用栈来存储左括号,遇到右括号则将栈顶的左括号弹出栈。直接模拟即可。
或者可以记录扫描过程中遇到的尚未被右括号抵消掉的左括号还剩下多少个。就是:扫描时遇到左括号则累计增加左括号个数,遇到右括号则将左括号累计个数减掉1个。
下面用栈来处理:
#include <stdio.h>
int main()
{
int s[];//栈
char a[];//表达式
int i,j,flag=;//flag==0表示括号匹配,否则不匹配
scanf("%s",a); j=-;
for(i=;a[i]!='@';i++)
{
if(a[i]=='(')
{
s[++j]=i;//遇到左括号则将下标入栈
}
else if(a[i]==')')
{
if(j>=)//栈不为空
j--;
else
{
flag=;//匹配失败
break;
}
}
}
if(j>=) //栈不为空
flag=;
if(flag==)
printf("NO\n");
else
printf("YES\n");
return ;
}
下面是刘俊东童鞋写的一段代码,就是统计目前剩余未被抵消掉的括号
#include <stdio.h>
int main()
{
char t;
int i=;
while(scanf("%c",&t)!=EOF)
{
if(t=='(') i++;
else if(t==')')
{
if(i<=) {printf("NO"); return ;}
else i--;
}
}
if(i==) printf("YES");
else printf("NO");
return ;
}
洛谷 P1739 表达式括号匹配的更多相关文章
- 洛谷 P1739 表达式括号匹配【STL/stack/模拟】
题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@"作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返 ...
- 洛谷P1739 表达式括号匹配
题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@"作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返 ...
- 洛谷 - P1739 - 表达式括号匹配 - 模拟 - 栈
https://www.luogu.org/problemnew/show/P1739 虽然应该是用栈的……但是直接模拟就可以了. #include<bits/stdc++.h> usin ...
- (栈 注意格式)P1739 表达式括号匹配 洛谷
题目描述 假设一个表达式有英文字母(小写).运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”:否则返 ...
- P1739 表达式括号匹配
题目描述 假设一个表达式有英文字母(小写).运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”:否则返 ...
- luoguP1739 表达式括号匹配 x
P1739 表达式括号匹配 题目描述 假设一个表达式有英文字母(小写).运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹 ...
- 2019.06.17课件:[洛谷P1310]表达式的值 题解
P1310 表达式的值 题目描述 给你一个带括号的布尔表达式,其中+表示或操作|,*表示与操作&,先算*再算+.但是待操作的数字(布尔值)不输入. 求能使最终整个式子的值为0的方案数. 题外话 ...
- 洛谷P1310 表达式的值 题解 栈/后缀表达式的应用
题目链接:https://www.luogu.org/problem/P1310 本题涉及算法:栈.前缀表达式转后缀表达式,动态规划思想. 这道题目我思考了好长时间,第一时间让我做的话我也做不出来. ...
- 栈的应用:表达式括号匹配检测(C)
问题说明: 假设数学表达式中允许包含两种括号:圆括号"()"和方括号"[]",嵌套顺序任意. 正确的嵌套模式:( [ ] ( ) ).[ ( [ ] [ ] ) ...
随机推荐
- VMware下centos7安装
VMware下centos7安装 转载地址:https://blog.csdn.net/hui_2016/article/details/68927487 一. 软件准备 二. Vmware12安装 ...
- <%@include>和<jsp:include>有什么不同呢
<%@include>jsp指令先包含再处理,<jsp:include>jsp动作先处理再包含 1.执行时间上:< %@ include file=”relativeUR ...
- for循环的简介及break和continue的区别
break和continue都是用来控制循环结构的,主要是停止循环. 1.break 有时候我们想在某种条件出现的时候终止循环而不是等到循环条件为false才终止. 这是我们可以使用break来完成. ...
- linux 更新yum源 改成阿里云源
1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的CentOS-Base ...
- SVM:利用SVM算法实现手写图片识别(数据集50000张图片)—Jason niu
import mnist_loader # Third-party libraries from sklearn import svm def svm_baseline(): training_dat ...
- Android Studio项目生成Jar包
步骤: 1)在module的gradle文件中,将apply plugin:'com.android.application'改为apply plugin:'com.android.library' ...
- js异步梳理:1.从浏览器的多进程到JS的单线程,理解JS运行机制
大家很早就知道JS是一门单线程的语言.但是也时不时的会看到进程这个词.首先简单区分下线程和进程的概念 1. 简单理解进程 - 进程是一个工厂,工厂有它的独立资源 - 工厂之间相互独立 - 线程是工厂中 ...
- 牛客练习赛35-背单词-线性DP
背单词 思路 :dp[ i ] [ 0 ]表示 第i 位放的元音 dp[ i ] [ 1 ]表示 第i 位放的辅音 ,cnt [ i ]含义是 长度为 i 的方案数. 转移 :dp[ i ] ...
- 英语口语练习系列-C27-艺术品-辨别物体-黄昏的歌
艺术品 a work of art Theory talent art gallery draw the sketch motivate students' interest full of imag ...
- Lua脚本性能优化指南
https://github.com/flily/lua-performance/blob/master/Guide.zh.md https://springrts.com/wiki/Lua_Perf ...