Java-编程之美-中国象棋

Java-编程之美-中国象棋_第1张图片

        解决该问题的关键是将棋盘进行抽象化成一个数据表,这样对数据表的操作便于对棋盘的操作。本题采用的抽象化是将它看成是两个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))