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

  1. import java.util.Scanner;
  2.  
  3. public class hello
  4. {
  5.  
  6. public static void main(String[] args)
  7. {
  8. // TODO Auto-generated method stub
  9. Scanner in=new Scanner(System.in);
  10. int n=in.nextInt(); //范围是[3,100]
  11. int[][] board= new int[n][n];
  12. boolean gotResult=false;
  13. int numOfX=0;
  14. int numOf0=0;
  15.  
  16. //读入矩陈阵
  17. for(int i=0;i<board.length;i++)
  18. {
  19. for(int j=0;j<board[i].length;j++)
  20. {
  21. board[i][j]=in.nextInt();
  22. }
  23. }
  24. //判断行
  25. for(int i=0;i<board.length;i++)
  26. {
  27. for(int j=0;j<board[i].length;j++)
  28. {
  29. if(board[i][j]==1)
  30. {
  31. numOfX++;
  32. }
  33. else
  34. {
  35. numOf0++;
  36. }
  37. }
  38. if(numOfX==n||numOf0==n)
  39. {
  40. gotResult=true;
  41. break;
  42. }
  43. else
  44. {
  45. numOfX=0;
  46. numOf0=0;
  47. }
  48. }
  49.  
  50. //判断列
  51. if(!gotResult)
  52. {
  53. for(int j=0;j<n;j++)
  54. {
  55. for(int i=0;i<n;i++)
  56. {
  57. if(board[i][j]==1)
  58. {
  59. numOfX++;
  60. }
  61. else
  62. {
  63. numOf0++;
  64. }
  65. }
  66. if(numOfX==n||numOf0==n)
  67. {
  68. gotResult=true;
  69. break;
  70. }
  71. else
  72. {
  73. numOfX=0;
  74. numOf0=0;
  75. }
  76. }
  77. }
  78.  
  79. //判断对角线
  80. if(!gotResult)
  81. {
  82. for(int i=0;i<n;i++)
  83. {
  84. if(board[i][i]==1)
  85. {
  86. numOfX++;
  87. }
  88. else
  89. {
  90. numOf0++;
  91. }
  92. }
  93. if(numOfX==n||numOf0==n)
  94. {
  95. gotResult=true;
  96.  
  97. }
  98. else
  99. {
  100. numOfX=0;
  101. numOf0=0;
  102. }
  103. }
  104.  
  105. //判断反对角线
  106. if(!gotResult)
  107. {
  108. for(int i=0;i<n;i++)
  109. {
  110. if(board[i][n-i-1]==1)
  111. {
  112. numOfX++;
  113. }
  114. else
  115. {
  116. numOf0++;
  117. }
  118. }
  119. if(numOfX==n||numOf0==n)
  120. {
  121. gotResult=true;
  122. }
  123. else
  124. {
  125. numOfX=0;
  126. numOf0=0;
  127. }
  128. }
  129.  
  130. //输出结果
  131.  
  132. if(gotResult)
  133. {
  134. if(numOfX==n)
  135. {
  136. System.out.println("X");
  137. }
  138. else if(numOf0==n)
  139. {
  140. System.out.println("0");
  141. }
  142. }
  143. else
  144. {
  145. System.out.println("NIL");
  146. }
  147. }
  148. }

  

程序设计入门—Java语言 第五周编程题 2井字棋(5分)的更多相关文章

  1. 程序设计入门—Java语言 第六周编程题 1 单词长度(4分)

    第六周编程题 依照学术诚信条款,我保证此作业是本人独立完成的. 1 单词长度(4分) 题目内容: 你的程序要读入一行文本,其中以空格分隔为若干个单词,以'.'结束.你要输出这行文本中每个单词的长度.这 ...

  2. 程序设计入门——C语言 第8周编程练习 1 单词长度(4分)

    第8周编程练习 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统 ...

  3. 程序设计入门——C语言 第7周编程练习 1多项式加法(5分)

    第7周编程练习 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统 ...

  4. 程序设计入门——C语言 第6周编程练习 2 完数(5分)

    2 完数(5分) 题目内容: 一个正整数的因子是所有可以整除它的正整数.而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数.例如6=1+2+3(6的因子是1,2,3). 现在,你要写一个程序, ...

  5. 程序设计入门——C语言 第6周编程练习 1 分解质因数(5分)

    1 分解质因数(5分) 题目内容: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数.比如,6可以被分解为2x3,而24可以被分解为2x2x2x3. ...

  6. 程序设计入门——C语言 第5周编程练习 1高精度小数(10分)

    1 高精度小数(10分) 题目内容: 由于计算机内部表达方式的限制,浮点运算都有精度问题,为了得到高精度的计算结果,就需要自己设计实现方法. (0,1)之间的任何浮点数都可以表达为两个正整数的商,为了 ...

  7. 程序设计入门——C语言 第4周编程练习 2 念整数(5分)

    题目内容: 你的程序要读入一个整数,范围是[-100000,100000].然后,用汉语拼音将这个整数的每一位输出出来. 如输入1234,则输出: yi er san si 注意,每个字的拼音之间有一 ...

  8. 程序设计入门——C语言 第4周编程练习 1 素数和(5分)

    题目内容: 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的 ...

  9. 程序设计入门——C语言 第3周编程练习 2 数字特征值(5分)

    2 数字特征值(5分) 题目内容: 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值.对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推.这个整数在第n位上的数字记作 ...

随机推荐

  1. FPGA学习笔记之格雷码、边沿检测、门控时钟

    一.格雷码 格雷码的优点主要是进位时只有一位跳变,误码率低. 1.二进制转格雷码 我们观察下表: 二进制码 格雷码 00 00 01 01 10 11 11 10 二进制码表示为B[],格雷码表示为G ...

  2. 获取windows磁盘的可用空间函数

    <?php /* *获取某个磁盘的剩余空间 *$param 关联数组,下标是哪个盘,单位,可以是B,KB,MB,GB *可以设置获取多个磁盘,例如:array('C'=>'KB','D'= ...

  3. vi全局替换

    http://blog.csdn.net/vindak/article/details/7830547 vi全局替换命令

  4. change和onchange触发为什么不立马生效?

    change和onchange触发了,为什么不立马生效?那是因为他们本身不是当文本改变就立马触发的事件,而是当文本改变了,blur离开了表单才触发. 如果要加上触发请结合keyup,keydown,o ...

  5. Android 通过 Wifi 调试 Debug (Android Studio)

    参考资料: http://www.cnblogs.com/sunzhenxing19860608/archive/2011/07/14/2106492.html 前提: Android 手机 和 PC ...

  6. 面向对象php基本格式、构造、析构、访问修饰符

    <?php//面向对象//1.类//由众多的对象抽象出来的 //2.对象//一切皆对象//由类实例化出来的 //基本形式class 类名{ 成员变量 成员方法 } $对象名 =new 类名 $对 ...

  7. 实例演示使用RDIFramework.NET 框架的工作流组件进行业务流程的定义—请假申请流程-Web

    实例演示使用RDIFramework.NET 框架的工作流组件 进行业务流程的定义—请假申请流程-Web 参考文章: RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系 ...

  8. android开发中scrollview添加自定义view的滑动显示问题

    最近做了一个实战用到自定义view,由于view比屏幕大所以想放到scrollview中,如下程序.发现不显示.于是对scrollview进行了研究. <LinearLayout xmlns:a ...

  9. 【转】lonekight@xmu·ACM/ICPC 回忆录

    转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...

  10. 分列:将excel单元格的内容拆分为两列

    提要:处理excel数据时有时需要把单元格的内容拆分为两列,可能方便外部软件的链接,可能使数据显示更明晰等等,有人说直接剪切加粘贴不就可以了吗,但是有时数据过多,这样处理很不效率,网上搜索的方法说插入 ...