标签:输出 素数判断 -- 需要 个数 else 问题: [] div
描述现在,有一行括号序列,请你检查这行括号是否配对。
3 [(]) (]) ([[]()])
No No Yes
配对问题: 另备一个数组存在两者中的其中一者,然后利用该数组(越晚存入的其中一种种类)与原数组(越早出现的另一种类) 进行消对。如果在原数组遍历结束时 刚刚好消完则配对成功,否则要么出现备用数组提前用完(j<0) 要么出现备用数组没消亡(j>0)
#include<stdio.h>
#include<string.h>
int main()
{
char s[10002],c[10002];
int i,N,len,j,flag;
scanf("%d",&N);
while(N--)
{
scanf("%s",s);
len=strlen(s);
for(i=0,j=0,flag=1;i<len;i++)
{
if(s[i]==‘[‘ || s[i]==‘(‘ )
{
c[j++]=s[i];(相当于c[j]=s[i] j++) ///将其中一个种类存入备用数组
}
else if(j>0 && ( (s[i]==‘]‘ && c[j-1]==‘[‘) || (s[i]==‘)‘ && c[j-1]==‘(‘) ) ) ////进行消对
{
j--;
}
else/////////出现不配对情况 如 [ 与 )
{
flag=0;
break;
}
}
if(flag==1&&j==0)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}
另外知识:在循环判断条件中加入flag条件 有利于提前终止 不必要的循环(只要有一个不符合 后面就不需要检验).比如素数判断
k=sqrt(n);
如 for(i=2;flag==1&&i<=k;i++)
{
if(n%i==0) flag=0;
}
当然也可以直接break;
标签:输出 素数判断 -- 需要 个数 else 问题: [] div
原文地址:http://www.cnblogs.com/wshyj/p/6193425.html