C++ 洛谷P1739 表达式括号匹配(史上最详细题解)

同志们好!

挖掘机技术哪家强?

当然是洒家强!

广告结束。


今天给大家带来的题目是:洛谷P1739 表达式括号匹配

目录:

1.题目到底是啥?

2.史上最详细题解!

3.代码举例!


题目到底是啥?

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 个。

题目链接:https://www.luogu.com.cn/problem/P1739


史上最详细题解!

P1739 表达式括号匹配难度系数:AAA

其实这道题看起来很复杂,关键是被列到了栈的内容里

但是听洒家一讲,准能明白!

吹牛到此为止。

这道题问题是怎么知道它左右括号的数量(数量一样也就匹配上了

左括号的ASCLL码是:40,右括号的ASCLL是:41

其实直接'('和')' 就行了

所以,核心句型就一点:

if(ch==')')
	if(top>0)
		top--;
	else
	{
		cout<<"NO";
		return 0; 
	}

所以,就补充完呗:

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int top;
int main()
{
	char ch;
	while(ch!='@')
	{
		scanf("%c",&ch);
		if(ch=='(')
			top++;
		if(ch==')')
			if(top>0)
				top--;
			else
			{
				cout<<"NO";
				return 0; 
			}
	}
	if(top==0)
		printf("YES");
	else
		printf("NO");
}

就那么简单好吧


代码举例!

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int top;
int main()
{
	char ch;
	while(ch!='@')
	{
		scanf("%c",&ch);
		if(ch=='(')
			top++;
		if(ch==')')
			if(top>0)
				top--;
			else
			{
				cout<<"NO";
				return 0; 
			}
	}
	if(top==0)
		printf("YES");
	else
		printf("NO");
}

点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 点赞关注收藏 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值