Java-编程之美-中国象棋

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值