题目内容:
你的程序先要读入一个整数n,范围是[3,100],这表示井字棋棋盘的边长。比如n=3就表示是一个3x3的棋盘。然后,要读入n行,每行n个数字,每个数字是1或0,依次表示[0,0]到[n-1,n-1]位置上的棋子。1表示X,0表示O(大写字母O)。
你的程序要判断其中是否存在某一方获胜,获胜的条件是存在整行或整列或整条对角线或整条反对角线上是相同的棋子。如果存在,则输出代表获胜一方字母:X或O(大写字母X或O);如果没有任何一方获胜,则输出NIL(三个大写字母,中间是字母I(India的I)。
注意:所给的棋盘上的棋子分布可能出现同一个棋子有多处满足获胜的条件,但是不会出现两种棋子都获胜的情况。
输入格式:
一个代表棋盘大小的数字n,后面跟上nxn个0或1的数字。
输出格式:
三种输出之一:
X
O
NIL
均为大写字母。
输入样例:
4
1 0 0 1
0 1 0 0
0 0 1 0
1 0 0 1
输出样例:
X
时间限制:500ms,内存限制:32000kb
【Java程序】
---------------
importjava.util.Scanner;
publicclass Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[][] tictactoe = new int [n][n];
for(int i = 0; i < n; ++i)
for(int j = 0; j < n; ++j)
tictactoe[i][j] = in.nextInt();
int num, tag = -1;
for(int i = 0; i < n;++i) { //搜索行
num = tictactoe[i][0];
for(int j = 0; j < n - 1; ++j) {
if(tictactoe[i][j] !=tictactoe[i][j + 1])
break;
if(j == n - 2)
tag = num;
}
}
for(int j = 0; j < n;++j) { //搜索列
num = tictactoe[0][j];
for(int i = 0; i < n - 1; ++i) {
if(tictactoe[i][j] != tictactoe[i +1][j])
break;
if(i == n - 2)
tag = num;
}
}
for(int i = 0; i < n- 1; ++i) { //正对角线
if(tictactoe[i][i] != tictactoe[i +1][i + 1])
break;
if(i == n - 2)
tag = tictactoe[0][0];
}
for(int i = 0; i < n- 1; ++i) { //反对角线
if(tictactoe[n - 1 - i][i] !=tictactoe[n - 2 - i][i + 1])
break;
if(i == n - 2)
tag = tictactoe[n - 1][0];
}
if(tag == 1)
System.out.println("X");
else if(tag==0)
System.out.println("O");
else
System.out.println("NIL");
}
}