zoukankan      html  css  js  c++  java
  • 象棋将帅问题

    《编程之美》第二个问题,将帅位置的组合,要求只能使用一个变量。

    问题本身很简单,但是加上要求限制之后(只能使用一个变量)就需要深入思考这个变量该存储什么内容了,仔细思考,将A的位置为9选1有9种可能,帅B的位置也为9选1有9种可能,二者组合共有81种可能,所以用一个能存够81个不同元素的byte类型即可搞定。

      a0 a1 a2 a3 a4 a5 a6 a7 a8
    b0 0 1 2 3 4 5 6 7 8
    b1 9 10 11 12 13 14 15 16 17
    b2 18 19 20 21 22 23 24 25 26
    b3 27 28 29 30 31 32 33 34 35
    b4 36 37 38 39 40 41 42 43 44
    b5 45 46 47 48 49 50 51 52 53
    b6 54 55 56 57 58 59 60 61 62
    b7 63 64 65 66 67 78 69 70 71
    b8 72 73 74 75 76 77 78 79 80

    使用一个循环遍历这81中可能,从中排除不能共存的位置即可,那么问题就该集中在如何排除不能共存的位置,比如a0和b0,b3,b6是不能共存的,那么也就是0,27,54需要被排除在外,我们用site代表将帅的位置组合,x代表将的位置,y代表帅的位置那么x+9*y=site,并且(x=[0-8],y=[0-8]),那么当x=0,3,6时y!=0,3,6以此类推,需要排除掉的情况就是site/9%3 == site%9%3。

    /**
     * A        a0 a1 a2
     *          a3 a4 a5
     *          a6 a7 a8
     *
     * B        b0 b1 b2
     *          b3 b4 b5
     *          b6 b7 b8
     */
    public class ABStrike {
        public static void main(String[] args) {
            byte site = 0;
            for (site = 0; site < 81; site++) {
                if (site/9%3 == site%9%3)
                    continue;
                System.out.println("A:" + site%9 + " B:" + site/9);
            }
        }
    }
    ------------------------------- 问道,修仙 -------------------------------
  • 相关阅读:
    linux 重定向命令
    G++依赖安装顺序
    SQL*Plus Error Messages
    理解 chroot
    CRM的基本功能有哪些?
    GCC依赖安装顺序
    RHEL6.3 安装GCC 记录
    python requests模块http请求
    安装paramiko模块
    python执行系统命令的方法:os.system(), os.popen(), subprocess.Popen()
  • 原文地址:https://www.cnblogs.com/elvalad/p/4117194.html
Copyright © 2011-2022 走看看