问题标题: 酷町堂:1191 括号配对

0
0

0
已采纳
贾文卓
贾文卓
高级光能
高级光能

这题最方便的方法是栈(stack)。不用栈的话会使得程序十分冗长,但是Pascal的系统中没有栈,要自己用数组模拟一遍。

思路:遇到前括号就进栈,遇到后括号看和栈顶括号是否匹配。

0
0
王紫馨
王紫馨
高级守护
高级守护
var
s:字符串;
a:字符,1..10010;
st,i:integer;
begin
输入s
for i:=0 to s长度-1 do begin
                       if s[i]=='('||s[i]=='[' begin
                                               a[st]=s[i];
                                               st++;
                                               end;
                       else begin
                            if (s[i]==']'与a[st-1]=='[')或者(s[i]==')'与a[st-1]=='(') st-1 else begin
                                                                                     write("NO");
                                                                                     结束整个程序
                                                                                     end;
                            end;
                       end;
  write("YES");
end.

大概就是这样(允许我不知道某些Pascal怎么写,没学到就换语言了,而且忘了)

0
王紫馨
王紫馨
高级守护
高级守护

然后补充一下上面我的回答:思路@贾文卓是一样的,都是用栈。但是关于Pascal我已经忘了该如何做,我尽量帮你翻译了

0
李乐凡
李乐凡
新手光能
新手光能

当然用栈做啊,不过我不会pascal语言,请谅解。

0
0
0
0
黄昊轩
黄昊轩
新手守护
新手守护

stack<char> a;

 

string s;

 

getline(cin,s);

 

循环(int i=0;i<s.size(); i++)

 

{

 

如果(s[i]=='['||s[i]=='(')

 

{

 

a.push(s[i]);

 

}

 

否则

 

如果((s[i]==']'&&a.top()!='[')||(s[i]==')'&&a.top()!='('))

 

{

 

输出"NO";

 

返回值 0;

 

}

 

否则 如果(s[i]==']'||s[i]==')')

 

{

 

a.pop();

 

}

 

}

 

输出"YES";

黄昊轩在2018-04-16 12:55:17追加了内容
stack<char> a;
 string s;
    getline(cin,s);
    for(int i=0;i<s.size(); i++)
    {
        if(s[i]=='['||s[i]=='(')
        {
            a.push(s[i]);
        }
        else
        if((s[i]==']'&&a.top()!='[')||(s[i]==')'&&a.top()!='('))
        {
            cout<<"NO";
            return 0;
        }
        else if(s[i]==']'||s[i]==')')
        {
            a.pop();
        }
    }
    cout<<"YES";

头文件还要加个#include  <stack>

0
0
0
0
叶奥瑞
叶奥瑞
修练者
修练者

for(int i=0;i<s.size(); i++) {
        if(s[i]=='['||s[i]=='(')
        {
            a.push(s[i]);
        }
        else
        if((s[i]==']'&&a.top()!='[')||(s[i]==')'&&a.top()!='('))
        {
            cout<<"NO";
            return 0;
        }
        else if(s[i]==']'||s[i]==')')
        {
            a.pop();
        }
    }

0
0
0
欧阳语聪
欧阳语聪
资深守护
资深守护

stack<char> a;

string s;

getline(cin,s);

循环(int i=0;i<s.size(); i++)

{

如果(s[i]=='['||s[i]=='(')

{

a.push(s[i]);

}

否则

如果((s[i]==']'&&a.top()!='[')||(s[i]==')'&&a.top()!='('))

{

输出"NO";

返回值 0;

}

否则 如果(s[i]==']'||s[i]==')')

{

a.pop();

}

}

输出"YES";

0
欧阳语聪
欧阳语聪
资深守护
资深守护

stack<char> a;

string s;

getline(cin,s);

循环(int i=0;i<s.size(); i++)

{

如果(s[i]=='['||s[i]=='(')

{

a.push(s[i]);

}

否则

如果((s[i]==']'&&a.top()!='[')||(s[i]==')'&&a.top()!='('))

{

输出"NO";

返回值 0;

}

否则 如果(s[i]==']'||s[i]==')')

{

a.pop();

}

}

输出"YES";

0
欧阳语聪
欧阳语聪
资深守护
资深守护

stack<char> a;

string s;

getline(cin,s);

循环(int i=0;i<s.size(); i++)

{

如果(s[i]=='['||s[i]=='(')

{

a.push(s[i]);

}

否则

如果((s[i]==']'&&a.top()!='[')||(s[i]==')'&&a.top()!='('))

{

输出"NO";

返回值 0;

}

否则 如果(s[i]==']'||s[i]==')')

{

a.pop();

}

}

输出"YES";

0
我要回答