zoukankan      html  css  js  c++  java
  • 程序设计入门—Java语言 第五周编程题 2井字棋(5分)

    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的数字。

     

    输出格式:

    三种输出之一:

    1. X
    2. O
    3. NIL

    均为大写字母。

     

    输入样例:

    1. 4
    2. 1 0 0 1
    3. 0 1 0 0
    4. 0 0 1 0
    5. 1 0 0 1

     

    输出样例:

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

      

  • 相关阅读:
    stl rope
    vijos1574 摇钱树
    图论 Dijkstra+堆优化
    c++输入优化
    Vijos1579 宿命的PSS 最小生成树
    快速求n阶多项式乘积
    c++stl map
    C#函数式程序设计之惰性列表工具——迭代器
    C#函数式程序设计之泛型(下)
    C#函数式程序设计之泛型(上)
  • 原文地址:https://www.cnblogs.com/bcd589/p/6087747.html
Copyright © 2011-2022 走看看