问题标题: 酷町堂:2065 括号匹配

0
0
已解决
董子墨
董子墨
中级天翼
中级天翼

新网站传送门

旧网站传送门

以下是我RE 80的代码

#include<iostream>
#include<stack>
using namespace std;
stack<char> s;
string a;
int cnt;
int main(){
    getline(cin,a);
    for(int i=0;i<a.size();i++){
        if(a[i]=='@')
            break;
        if(a[i]=='(')
            s.push(a[i]);
        else if(a[i]==')'){
            if(s.top()!='('){
                cout<<"NO";
                return 0;
            }
            else
                s.pop();
            cnt++;
            if(cnt>=20){
                cout<<"NO";
                return 0;
            }
        }
    }
    if(s.empty())
        cout<<"YES";
    else
        cout<<"NO";
    return 0;
}

求大佬们找错


0
已采纳
被禁言 何冯成
何冯成
中级光能
中级光能

本蒟蒻也来凑一波

本题有以下几个重点:

1.左右括号匹配(意思是除了括号,其他没什么卵用)

2.结尾有一个@做结束符。当然,你也可以cin后用strlen()判断长度。

所以,现在开始讲思路:

既然左右括号要匹配,最简单的肯定是用for循环扫一遍啦!

for(int i=0;i<strlen(c);i++){   
        if(c[i]=='(') a++;
        if(c[i]==')') b++;
    }

可是,虽然它是一道水题,可是还是有些陷阱的,例如:))a+b((@

所以,我们再加入一个判断:

    for(int i=0;i<strlen(c);i++){   
        if(c[i]==')') b++;
        if(b>a){
            cout<<"NO";
            return 0;
        } 
        if(c[i]=='(') a++;
    }

这样,代码的主体就完成啦!我们再判断一下左右括号的数量匹不匹配:

    if(a!=b) cout<<"NO";
    else     cout<<"YES";

-----------------------------------------------------------------------------------------------------------

OK ,AC愉快

0
0
被禁言 何冯成
何冯成
中级光能
中级光能

本蒟蒻也来凑一波

本题有以下几个重点:

1.左右括号匹配(意思是除了括号,其他没什么卵用)

2.结尾有一个@做结束符。当然,你也可以cin后用strlen()判断长度。

所以,现在开始讲思路:

既然左右括号要匹配,最简单的肯定是用for循环扫一遍啦!

0
我要回答