题目描述
现在,有一行括号序列,里面只包含”(“,”)”,”[“,”]”四种符号,请你检查这行括号是否配对。如:
[]是匹配的
([])[]是匹配的
((]是不匹配的
([)]是不匹配的
#include<stdio.h>
#include<string.h>
int main()
{char skr[100];
aa:int s1=0;
int s2=0;
int s3=0;
int a1[100]={0},b1[100]={0},c1[100]={0},a2[100]={0},b2[100]={0},c2[100]={0};
int i,j=0,k=0,m=0,l=0,n=0,o=0,t,x,y,z;
while(gets(skr))
{if(skr[0]=='\0')
break;
for(i=0;skr[i]!='\0';i++)
{if(skr[i]=='(')
{s1++;a1[j]=i;j++;}
else if(skr[i]=='[')
{s2++;b1[k]=i;k++;}
else if(skr[i]=='{')
{s3++;c1[m]=i;m++;}
if(skr[i]==')')
{a2[l]=i;l++;
if (s1==0)
{printf("no\n");
goto aa;}
}
else if(skr[i]==']')
{b2[n]=i;n++;
if(s2==0)
{printf("no\n");
goto aa;}
}
else if(skr[i]=='}')
{c2[o]=i;o++;
if(s3==0)
{printf("no\n");
goto aa;}
}
if(skr[i]==')'&&s1!=0)
{s1--;
}
else if(skr[i]==']'&&s2!=0)
{s2--;
}
else if(skr[i]=='}'&&s3!=0)
{s3--;
}
}
if(s1==0&&s2==0&&s3==0)
{if(j!=0&&k!=0&&m!=0)
{for(x=0;x<j;x++)
{for(y=0;y<k;y++)
{for(z=0;z<m;z++)
{if((a1[x]>b1[y]&&a2[j-1-x]>b2[k-1-y]&&a1[x]<b2[k-1-y])||(a1[x]>c1[z]&&a2[j-1-x]>c2[m-1-z]&&a1[x]<c2[m-1-z])||(b1[y]>a1[x]&&b2[k-1-y]>a2[j-1-x]&&b1[y]<a2[j-1-x])||(b1[y]>c1[z]&&b2[k-1-y]>c2[m-1-z]&&b1[y]<c2[m-1-z])||(c1[z]>a1[x]&&c2[m-1-z]>a2[j-1-x]&&c1[z]<a2[j-1-x])||(c1[z]>b1[y]&&c2[m-1-z]>b2[k-1-y]&&c1[z]<b2[k-1-y]))
{printf("no\n");
goto aa;}
}}}printf("yes\n");
goto aa;}
else if(m==0)
{for(x=0;x<j;x++)
{for(y=0;y<k;y++)
{if((a1[x]>b1[y]&&a2[j-1-x]>b2[k-1-y]&&a1[x]<b2[k-1-y])||(b1[y]>a1[x]&&b2[k-1-y]>a2[j-1-x]&&b1[y]<a2[j-1-x]))
{printf("no\n");
goto aa;
}
}}printf("yes\n");
goto aa;}
else if(j==0)
{for(y=0;y<k;y++)
{for(z=0;z<m;z++)
{if((b1[y]>c1[z]&&b2[k-1-y]>c2[m-1-z]&&b1[y]<c2[m-1-z])||(c1[z]>b1[y]&&c2[m-1-z]>b2[k-1-y]&&c1[z]<b2[k-1-y]))
{printf("no\n");
goto aa;}
}
}printf("yes\n");
goto aa;}
else if(k==0)
{for(x=0;x<j;x++)
{for (z=0;z<m;z++)
{if((a1[x]>c1[z]&&a2[j-1-x]>c2[m-1-z]&&a1[x]<c2[m-1-z])||(c1[z]>a1[x]&&c2[m-1-z]>a2[j-1-x]&&c1[z]<a2[j-1-x]))
{printf("no\n");
goto aa;}
}}printf("yes\n");
goto aa;}
else
{printf("yes\n");
goto aa;}
}
else
{printf("no\n");
goto aa;
}}}