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