http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=show_problem&problem=635
题意:给定一字符串,玩家输入另一个字符串猜,猜错满7次就lose;猜中整个字符串输出win;猜错7次前又猜不出,输入chicken。重复字母只算一次。
解题:参考其它人的,先把字符串处理,把重复剔除,再来统计nChar/solved/wrong。
收获:能解决问题就行,而不用一定照题目思路走;换种想法,把数据处理后再进行题目思路应用数据,会高效简单很多。
#include <iostream>
#include <string.h>
using namespace std;
const int MAXLENGTH = 1000;
int main()
{
int index;
char puzzle[MAXLENGTH];
char guess[MAXLENGTH];
memset(puzzle, 0, MAXLENGTH);
memset(guess, 0, MAXLENGTH);
while ( cin >>index )
{
if ( index == -1 )
{
break;
} // end if
cin >>puzzle >>guess;
int check[MAXLENGTH];
memset(check, 0, MAXLENGTH);
int nChar = 0;
for ( int i=0; i<strlen(puzzle); i++ )
{
if ( check[puzzle[i]] == '\0' )
{
check[puzzle[i]] = 1;
nChar++;
} // end if
} // end for
int solved = 0;
int wrong = 0;
for ( int i=0; i<strlen(guess); i++ )
{
if ( check[guess[i]] == 0 )
{
wrong++;
if ( wrong >= 7 )
{
break;
} // end if
} // end if
else
{
if ( check[guess[i]] == 1 )
{
solved++;
check[guess[i]] ++;
if ( solved == nChar )
{
break;
} // end if
} // end if
} // end else
} // end for
cout <<"Round " <<index <<'\n';
if ( wrong >= 7 )
{
cout <<"You lose." <<'\n';
} // end if
else
{
if ( solved == nChar )
{
cout <<"You win." <<'\n';
} // end if
else
{
cout <<"You chickened out."<<'\n';
} // end else
} // end else
} // end while
return 0;
}