福州大学 括号问题
这题当时比赛的时候想到是深搜,但当时深搜做得不多,没做得出,后来看以大牛代码才会写,主要是判断条件写得好。
#include<stdio.h>
#include<string.h>
char str[20];
int l,cnt;
void DFS( int k,int num )
{
if( num < 0 )//右括号不能多于左括号
return ;
if( k == l )
{
if( num == 0 )//当左边跟右边的括号相等且刚好到最后一个,就是一中符合条件的可能
++cnt;
return;
}
if( str[k] == '(' )
DFS( k + 1,num + 1 );
else if( str[k] == ')' )
DFS( k + 1,num - 1 );
else//?
{
DFS( k + 1,num + 1 );
DFS( k + 1,num - 1 );
}
}
int main( )
{
while( gets( str ) )
{
l = strlen( str );
cnt = 0;
DFS( 0,0 );
printf( "%d\n",cnt );
}
return 0;
}
本人还是新手 ,转载请注明来自Lvsi‘s home
浙公网安备 33010602011771号