首页 > 代码库 > 《编程之美》中国象棋将帅问题
《编程之美》中国象棋将帅问题
问题描述
中国象棋里面双方的“将”和“帅”各自呆在自己的九宫格里,一步只能横移或纵移一格,而且双方不能见面(既不能处在同一条纵线上)。在残局时有的人会用这一规则走出绝妙杀招。假设一方的“将”为A,另一方的“帅”为B,现在求双方所能出现的所有合法位置,所需变量只能用一个字节来保存。
我的解法
#include <stdio.h> int main(void) { unsigned char chPos = 0x11; for ( ; (chPos & 0x0f) <= 9 ; chPos += 0x01) { for ( ; (chPos >> 4) <= 9 ; chPos += 0x10) { if (((chPos & 0x0f) - 1) % 3 == (((chPos >> 4) - 1) % 3)) continue; printf ("B = (%c , %d) A = (%c , %d)\n" , 'd' + ((chPos & 0x0f) - 1) % 3 , 1 + ((chPos & 0x0f) - 1) / 3 , 'd' + ((chPos >> 4) - 1) % 3 , 8 + ((chPos >> 4) - 1 ) / 3 ); } chPos &= 0x0F; chPos |= 0x10 ; } return 0; }
只要一个字节,将帅只能在9个点移动,所以前四个位表示将、后四位表示帅的位置(1~9),那么余3是列号,除3是行号,只要保证列号不同即可。
《编程之美》中国象棋将帅问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。