程序先要读入一个整数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
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 井字棋,n*n格二维数组,输入0或1,判断谁赢输出X或O,或平局NIL
// 获取输入数据
Scanner in = new Scanner(System.in);
// 获得n
final int n = in.nextInt();
while (n >= 3 && n <= 100) {
boolean win = false;
int numOfX = 0;
int numOfO = 0;
// 创建二维数组
int[][] nxn = new int[n][n];
// for (int i = 0; i < nxn.length; i++) {
// for (int j = 0; j < nxn[i].length; j++) {
// nxn[i][j] = 0;
// // 测试输出n*n个0
// System.out.print(nxn[i][j] + " ");
// }
// System.out.println();
// }
// 获取输入n*n个0或1且仅为0或1
for (int i = 0; i < nxn.length; i++) {
for (int j = 0; j < nxn[i].length; j++) {
int x = in.nextInt();
if (x == 0 || x == 1) {
nxn[i][j] = x;
// 测试输出结果
// System.out.print(nxn[i][j] + " ");
}
// System.out.println();
}
}
// 检查行
for (int i = 0; i < nxn.length; i++) {
numOfX = 0;
numOfO = 0;
for (int j = 0; j < nxn[i].length; j++) {
if (nxn[i][j] == 1) {
numOfX++;
} else
numOfO++;
}
if (numOfX == n || numOfO == n) {
win = true;
break;
}
}
// 检查列
if (!win) {
for (int j = 0; j < n; j++) {
numOfX = 0;
numOfO = 0;
for (int i = 0; i < n; i++) {
if (nxn[i][j] == 1) {
numOfX++;
} else
numOfO++;
}
if (numOfX == n || numOfO == n) {
win = true;
break;
}
}
}
// 检查对角线
if (!win) {
numOfX = 0;
numOfO = 0;
for (int i = 0, j = 0; i < n && j < n; i++, j++) {
if (nxn[i][j] == 1) {
numOfX++;
} else
numOfO++;
if (numOfX == n || numOfO == n) {
win = true;
break;
}
}
}
// 检查反对角线
if (!win) {
numOfX = 0;
numOfO = 0;
for (int i = (n - 1), j = 0; i >= 0 && j < n; i--, j++) {
if (nxn[i][j] == 1) {
numOfX++;
} else
numOfO++;
if (numOfX == n || numOfO == n) {
win = true;
break;
}
}
}
// 输出结果
if (win) {
if (numOfX == n) {
System.out.println("X");
} else
System.out.println("O");
} else
System.out.println("NIL");
}
in.close();
}
}