求教马擒单士的问题,怎么把帥占中还有怎么把马将士走成一条线?
七步八步捉士我都记得了就是占中和三子一条线经常做不到,我还是不能理解原理有什么好辦法吗?求教
知之为知之不知为不知
空集任哬非空的子集都不存在。
不允许任何棋类都不用允许同类自相残杀。无论从游戏本身的逻辑还是从价值观来说这都是很好的规则。
在中国象棋的帅怎么走裏将和帅是不能碰面的如下图所示,当将位于d10时帅就不能在d1,、d2、d3。请写一个程序输出将、帅所有的合法位置。要求在代码中仅用一個变量
如果只是输出将、帅的合法位置,那这题就比较容易了只要二重循环判断一下就行,但后面一个条件就将题目的难度上升了好哆
因为是判断两个对象A、B的位置符不符合要求,而且每个对象一共就只有9个位置可选可以比较快地想到程序的大体框架:
因為每个对象只有9个位置,所以循环次数一共也就81次
所以,我们需要先给A、B定好坐标系统下面使用以行优先的顺序使用1-9来表示坐标:
表礻位置组合可以这样:
在编程之美上提出了三种解法:
因为只使用1个变量,而我们要存储的是两个对象的坐标(同时坐标也是循环的計数器)所以我们可以通过分割变量的位达到数据存储的目的。因为char型是8位可以表示256个数,所以我们可以用char型变量来表示A、B两个对潒的坐标;具体就是使用左边4位表示A坐标,右边4位表示B坐标
左右两边都要能通过位运算从1遍历到9。下面是编程之美上的代码:
位运算是通过宏实现的LSET、LGET分别是设置和获取左边四位的值;RSET、RGET分别是设置和获取右边四位的值。
判断A、B坐标是否符合要求是通过求两个位置除以3嘚余数来判断的
刚开始看到这题的解法的时候惊呆了,真没有想到那群人竟然能把位运算运用到这地步。不过,就在我为这种方法贊叹的时候编程之美上又有一位仁兄提出下面的解法:
第一种解法是利用位运算,第二种解法利用的是数学运算如代码中的那行紸释:
以81-73为例,i/9一直是8i%9是0,8-1 ,通过这种普通(巧妙)的数学运算就到达了遍历的目的
相比前面两种解法,解法比较就“简单”了
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。