您的位置:首页 > 编程语言 > Java开发

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));
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: