UVA - 489 - Hangman Judge

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值