文章

1

粉丝

71

获赞

0

访问

1.4k

头像
大佬帮我看看为啥只对60%,1067括号匹配
我要提问
发布于2024年3月25日 16:14
阅读数 1.4k

#include

using namespace std;

int main()
{
    int n;
    cin>>n;
    for(int i=0; i     {
        char a[260],b[260];
        scanf("%s",a);
        int k=0,z=1;
        if(a[0]=='>'||a[0]==']'||a[0]==')'||a[0]=='}')
            z=0;
        else
        {
            b[0]=a[0];
            k++;
        }
        int j;
        for(j=1; j         {
            if(a[j]=='<'||a[j]=='['||a[j]=='('||a[j]=='{')
            {
                b[k]=a[j];
&nb...

登录查看完整内容


登录后发布评论

6 条评论
snake VIP
2024年3月25日 17:41

你的优先级有问题

[{}]{[]}

赞(0)

北海北 : 回复 snake: 这个结果是对的啊

2024年3月26日 09:15

snake : 回复 北海北: 优先级:大括号->中括号->小括号->尖括号,这个应该是NO

2024年3月26日 09:48

北海北 : 回复 snake: 好的,我以为只是简单的括号匹配问题

2024年3月26日 09:59

北海北 : 回复 snake: #include <bits/stdc++.h> using namespace std; int main() { int n; cin>>n; for(int i=0; i<n; i++) { char a[260],b[260]; scanf("%s",a); int k=0,z=1; if(a[0]=='>'||a[0]==']'||a[0]==')'||a[0]=='}') z=0; else { b[0]=a[0]; k++; } int j; for(j=1; j<strlen(a); j++) { if(a[j]=='<') { b[k]=a[j]; k++; } else if(a[j]=='(') { if(k>0&&a[k-1]=='<') break; b[k]=a[j]; k++; } else if(a[j]=='[') { if(k>0&&(a[k-1]=='<'||a[k-1]=='(')) break; b[k]=a[j]; k++; } else if(a[j]=='{') { if(k>0&&(a[k-1]=='<'||a[k-1]=='('||a[k-1]=='[')) break; b[k]=a[j]; k++; } else if(a[j]=='>') { if(k==0) break; if(b[k-1]!='<') break; else k--; } else if(a[j]==']') { if(k==0) break; if(b[k-1]!='[') break; else k--; } else if(a[j]=='}') { if(k==0) break; if(b[k-1]!='{') break; else k--; } else if(a[j]==')') { if(k==0) break; if(b[k-1]!='(') break; else k--; } } if(j==strlen(a)&&z==1&&k==0) z=1; else z=0; if(z==0) printf("NO\n"); else printf("YES\n"); } return 0; } 我试的案例都对,但是对的更少了

2024年3月26日 10:13

snake : 回复 北海北: {{<>{[]}()}<>}

2024年3月26日 10:39