题目
代码
#include <stdio.h>
int judge(char s[]){
int count=0,i=0; //count用于做栈
while (s[i]!='@')
{
if (s[i]=='(')
count++; //扫到'('count加1
if (s[i]==')')
{
count--; //扫到')'count减1
if (count<0)
return 0; //count小于0说明')'多了
}
i++;
}
if (count!=0) return 0; //count不等于0说明'('多了
else return 1;
}
int main(){
char s[256];
scanf("%s",s);
if (judge(s))
printf("YES");
else
printf("NO");
return 0;
}
解释
本题灵活地运用了栈的知识。主要体现在count的使用上。但与一般地运用不同,本题解法并未使用数组,而是用一个整型变量的增减表示进栈和出栈。
int judge(char s[]){
int count=0,i=0;
while (s[i]!='@')
{
if (s[i]=='(')
count++;
if (s[i]==')')
{
count--;
if (count<0)
return 0;
}
i++;
}
if (count!=0) return 0;
else return 1;
}
总结
深刻体会“栈”的使用,一个数的增减亦可表示进出栈。