本文主要是介绍编程之美——中国象棋将帅问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
A表示“将”,B表示“帅”。用1~9表示A、B的坐标。
请写出一个程序,输出A、B所有合法位置。要求在代码中只能使用一个字节存储变量。
- 解法一:
用一个unsigned char类型变量存储A、B的位置,前4bit表示A的位置,后4bit表示B的位置。
#include <stdio.h>#define HALF_BITS_LENGTH 4#define FULLMASK 255#define LMASK (FULLMASK << HALF_BITS_LENGTH)#define RMASK (FULLMASK >> HALF_BITS_LENGTH)#define LSET(b, n) (b = ((RMASK & b) | ((n) << HALF_BITS_LENGTH)))#define RSET(b, n) (b = ((LMASK & b) | (n)))#define LGET(b) ((LMASK & b) >> HALF_BITS_LENGTH)#define RGET(b) (RMASK & b)#define GRIDW 3int main(void) {unsigned char b;for (LSET(b, 1); LGET(b) <= GRIDW * GRIDW; LSET(b, (LGET(b) + 1)))for (RSET(b, 1); RGET(b) <= GRIDW * GRIDW; RSET(b, (RGET(b) + 1)))if (LGET(b) % GRIDW != RGET(b) % GRIDW)printf("A = %d, B = %d\n", LGET(b), RGET(b));return 0;
}
- 解法二:
unsigned char i = 81;
while (i--)
{if (i / 9 % 3 == i % 9 % 3)continue;printf("A = %d, B = %d\n", i / 9 + 1, i % 9 + 1);
}return 0;
- 解法三:
这篇关于编程之美——中国象棋将帅问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!