Java-编程之美-中国象棋
2016-09-09 21:36
134 查看
解决该问题的关键是将棋盘进行抽象化成一个数据表,这样对数据表的操作便于对棋盘的操作。本题采用的抽象化是将它看成是两个9点阵,如下所示:
* 1 2 3
* 4 5 6
* 7 8 9
*
* 1 2 3
* 4 5 6
* 7 8 9
这样将问题看成是:如果A棋盘的数字在1的位置,则B棋盘的数字只能是在2,3,5,6,8,9的位置上,当A为8时,B的棋子只能在1,3,4,6,7,9上,即A和B的位置不能同时在纵轴上出现。因此,只要打印出复合条件的组合即可。另外,题目要求只能使用一个变量。
public class BOP_001_中国象棋 { public static void main(String[] args) { //outputLayout1(); outputLayout2(); } /** * 输出A、B所有合法的位置。要求在代码中只能使用一个变量。 * 1 2 3 * 4 5 6 * 7 8 9 * * 1 2 3 * 4 5 6 * 7 8 9 * */ //该方法作为参考,利用的是两个变量i和j public static void outputLayout1(){ int count = 0;//可以注释掉,用于验证输出的结果的个数 for(int i = 1; i <= 9 ; i++){ //System.out.println("A=" + i); for(int j = 1; j <= 9; j++){ if(j != i && j != (i + 3)&& j != (i + 6) && j != (i - 3)&& j != (i -6)){ System.out.println("A=" + i + ";" + "B=" + j); count++; } } } //System.out.println(count); } //该方法可取,只使用一个变量i 来控制程序的循环次数。 public static void outputLayout2(){ int i = 81; while(i-- > 0){ if(i / 9 % 3 != i % 9 % 3){ System.out.println("A=" + (i / 9 + 1) + "B=" + (i % 9 + 1)); } } } }
相关文章推荐
- 如何用Java实现网络中国象棋室(一)
- 编程之美 - 读书笔记 - 中国象棋将帅问题
- Java中国象棋博弈程序探秘[4]——生成有效着法
- Java中国象棋博弈程序探秘[5]——搜索算法
- Java中国象棋博弈程序探秘[5]——搜索算法
- 单机中国象棋(Java版)
- Java中国象棋博弈程序探秘[6]——游戏与界面
- Java中国象棋博弈程序探秘[3]——着法合法性判断
- Java中国象棋博弈程序探秘[3]——着法合法性判断
- Java中国象棋博弈程序探秘[6]——游戏与界面
- Java常见问题集锦(来自Sun中国官方站)-Java基础-Java-编程开发
- Java中国象棋博弈程序探秘[1]——博弈程序开发概述
- Java中国象棋博弈程序探秘[1]——博弈程序开发概述
- Java中国象棋博弈程序探秘[3]——着法合法性判断
- Java中国象棋博弈程序探秘[2]——棋盘的表示
- 编程之美 - 中国象棋将帅问题
- 如何用Java实现网络中国象棋室(二)
- Java中国象棋博弈程序探秘[2]——棋盘的表示
- Java中国象棋博弈程序探秘[4]——生成有效着法
- Java中国象棋博弈程序探秘[6]——游戏与界面