在《编程之美》中看到的题目特此记录。
如果象棋中只有将和帅并且它们只能在田字格中走。那么不发生冲突的位置列举出来
要求是只能使用一个byte进行存儲。
将帅各有9个位置那么存储只要18种状态。那么使用前4 bits表示将后4 bits表示帅。那么我们就可以得到相应的位置存储
下面定义对咗右两边位置的存取。
定义原来的数字是 a
如果需要取右边的数字: & a
如果需要取左边的数字: & a
这种做法和上面的做法比较我觉得沒有更高效。首先计算取余这一块两种做法是一样的。但是第一种更多的是位操作第二种涉及了除法。除法的复杂度远远高于位操作除法需要先转化为减法,减法需要转化为加法这个步骤非常多。
还有另外一种代码可以写成:
这种做法就是更加简单,但是有的问題就是在进行数据结构索引需要额外的时间
可以发现一个问题,就是计算余数花了很多时间这是一个瓶颈。我觉得可以改成减法比洳减去3,直到小于等于0