一个值表示将帅合理位置问题

刚看到这个问题的时候,我不知道将帅合理位置是哪些,没玩过象棋,对围棋的理解也只停留在只要把对方围起来就好了。所以我需要去学习学习。

知道了合理位置之后,我的想法是,那不就是用一个int型的整数表示吗,1-9表示九个位置,这么简单。额,这种想法的不足是要用两个值,一个保存将的位置,一个保存帅的位置。而不是一个值,可以说是审题不清吧。

正确的做法是,用二进制表示,9个位置需要4位,两个9个位置需要8位。为什么不是18个位置需要5位呢?2^5=32呢!因为5不能被平分?

不是的,是因为它存储的不仅仅是位置,而且是棋子所在的位置,是一种状态,黑方有9种状态,红方在黑方的每种状态下也有9种状态,这个状态的关系不是相加,而是相乘的关系,所以两方的将帅位置状态共81种情况,32不能表示81中情况。

那为什么不能用2^7=128的7位表示呢,可能因为7不能被平分吧。虽然7不能被平分,但是应该可以找到一种方法让81中状态和7位二进制表示的数一一对应起来,只是这样这个数表示哪种状态需要对应一张表格了,而且不利于比较双方是否处于同一条线上。

综上,用8位表示是很直观而且利于操作的。

知道了利用一个8位2进制的数来存储就好办了。前四位表示黑方,后四位表示红方,0001 0011表示黑方在1位置,红方在3位置。当两个位置%3的结果相等,表示不合法,具体的操作可以参考:

https://blog.csdn.net/qq_36767247/article/details/80628357

这篇博文,里面有三种方法。

总结就是当遇到说用一个值怎么怎么样的时候,不要老是想整数,第一反应应该是二进制,毕竟省空间,而且8位16位32位64位都可以是一个数呢。

猜你喜欢

转载自blog.csdn.net/Michaelia_hu/article/details/87878919