0183-Black-and-White

http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=0183&lang=jp
問題概要
マルバツゲームの勝利判定。前にもAOJで似たような問題を見た気がするけど思い出せない・・・。

考え方
どうせ3x3の大きさしかないし工夫せずに考えられるパターンをすべてチェックする。
終了は0で与えられるとなっているが、EOFで判定しても特に問題はなさそう。

実装(C++/インクルード省略)

char board[3][4];
int main(){
	while(1){
		char winner=' ';
		for(int i=0;i<3;i++)
			if(scanf("%s",board[i])==EOF) return 0;
		//斜めチェック
		if(board[0][0]==board[1][1]&&board[2][2]==board[1][1]){
			if(board[0][0]!='+')winner=board[0][0];
		} else if(board[2][0]==board[1][1]&&board[0][2]==board[1][1]){
			if(board[0][2]!='+')winner=board[0][2];
		} else{ //縦横チェック
			for(int i=0;i<3;i++){
				if(board[i][0]==board[i][1]&&board[i][1]==board[i][2]){
					if(board[i][0]!='+') winner=board[i][0];
				}
				if(board[0][i]==board[1][i]&&board[1][i]==board[2][i]){
					if(board[0][i]!='+') winner=board[0][i];
				}
			}
		}
		if(winner==' '){
			puts("NA");
		} else {
			printf("%c\n",winner);
		}
	}
	return 0;
}