這個題目我錯了很久,一直錯的原因是我沒有真正的理解題目的意思。
在 1 ABAB 這組數(shù)據(jù)上錯了,改過來之后就過了,下一次一定要好好讀題。
這一次是盡量用C++來寫,在用rfind函數(shù)的時候出了一點小問題,應該是從這個字符往前推一位開始查找,若是第一個字符,就不能調(diào)用函數(shù)了,不然就會出錯。所以就多加了一個判斷,影響了程序的可讀性。下一次要找到一個不需要這樣判斷的方法。
#include<iostream>
#include<string>
#define DEBUG 1
using namespace std ;

const int cap = 33 ;

char salon[cap] ;
string in ;

int check( int avai )


{
int i, j, pos(-1), flag, away(0) ;

for( i=0; i<in.size(); ++i )
{
if( i >= 1 )
pos = in.rfind( in[i], i ) ;

if( pos >= 0 )
{
flag = 0 ;

for( j=0; j<avai; ++j )
{

if( salon[j] == in[i] )
{
salon[j] = '\0' ;
flag = 1 ;
break ;
}
}

if( !flag )
{

for( j=0; j<avai; ++j )
{

if( !salon[j] )
{
flag = 1 ;
break ;
}
}
}
if( !flag )
++away ;
}

else
{

for( j=0; j<avai; ++j )
{

if( !salon[j] )
{
salon[j] = in[i] ;
break ;
}
}
}
}
return away ;
}

void output( int away )


{
if( away )
cout << away << " customer(s) walked away." << endl ;
else
cout << "All customers tanned successfully." << endl ;
}

int main( )


{
#if DEBUG
freopen("C:\\Documents and Settings\\Administrator\\桌面\\in.in","r",stdin) ;
freopen("C:\\Documents and Settings\\Administrator\\桌面\\out.out","w",stdout) ;
#endif

int avai, away ;

while( cin >> avai )
{
if( avai == 0 )
break ;
cin >> in ;
away = check( avai ) ;
output( away ) ;
}
return 0 ;
}
