2
井字棋(5分)
題目內容:
嗯,就是視頻里說的那個井字棋。視頻里說了它的基本思路,現在,需要你把它全部實現出來啦。
你的程序先要讀入一個整數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
import java.util.Scanner;
public class hello
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int n=in.nextInt(); //范圍是[3,100]
int[][] board= new int[n][n];
boolean gotResult=false;
int numOfX=0;
int numOf0=0;
//讀入矩陳陣
for(int i=0;i<board.length;i++)
{
for(int j=0;j<board[i].length;j++)
{
board[i][j]=in.nextInt();
}
}
//判斷行
for(int i=0;i<board.length;i++)
{
for(int j=0;j<board[i].length;j++)
{
if(board[i][j]==1)
{
numOfX++;
}
else
{
numOf0++;
}
}
if(numOfX==n||numOf0==n)
{
gotResult=true;
break;
}
else
{
numOfX=0;
numOf0=0;
}
}
//判斷列
if(!gotResult)
{
for(int j=0;j<n;j++)
{
for(int i=0;i<n;i++)
{
if(board[i][j]==1)
{
numOfX++;
}
else
{
numOf0++;
}
}
if(numOfX==n||numOf0==n)
{
gotResult=true;
break;
}
else
{
numOfX=0;
numOf0=0;
}
}
}
//判斷對角線
if(!gotResult)
{
for(int i=0;i<n;i++)
{
if(board[i][i]==1)
{
numOfX++;
}
else
{
numOf0++;
}
}
if(numOfX==n||numOf0==n)
{
gotResult=true;
}
else
{
numOfX=0;
numOf0=0;
}
}
//判斷反對角線
if(!gotResult)
{
for(int i=0;i<n;i++)
{
if(board[i][n-i-1]==1)
{
numOfX++;
}
else
{
numOf0++;
}
}
if(numOfX==n||numOf0==n)
{
gotResult=true;
}
else
{
numOfX=0;
numOf0=0;
}
}
//輸出結果
if(gotResult)
{
if(numOfX==n)
{
System.out.println("X");
}
else if(numOf0==n)
{
System.out.println("0");
}
}
else
{
System.out.println("NIL");
}
}
}
