本题选自《编程之美》1.2:中国象棋将帅问题。
代码如下
#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 = (b & RMASK) | (n << HALF_BITS_LENGTH))
#define RSET(b, n) (b = (b & LMASK) | n)
#define LGET(b) (b >> HALF_BITS_LENGTH)
#define RGET(b) (b & RMASK)
#define GRID 3
#include <stdio.h>
int main()
{
unsigned char b;
for (LSET(b, 1); LGET(b) <= GRID * GRID; LSET(b, (LGET(b) + 1))){
for (RSET(b, 1); RGET(b) <= GRID * GRID; RSET(b, (RGET(b) + 1))){
if (LGET(b) % GRID != RGET(b) % GRID){
printf("A = %d, B = %d t", LGET(b), RGET(b));
}
}
printf("n");
}
return 0;
}
结果如下:
A = 1, B = 2 A = 1, B = 3 A = 1, B = 5 A = 1, B = 6 A = 1, B = 8 A = 1, B = 9
A = 2, B = 1 A = 2, B = 3 A = 2, B = 4 A = 2, B = 6 A = 2, B = 7 A = 2, B = 9
A = 3, B = 1 A = 3, B = 2 A = 3, B = 4 A = 3, B = 5 A = 3, B = 7 A = 3, B = 8
A = 4, B = 2 A = 4, B = 3 A = 4, B = 5 A = 4, B = 6 A = 4, B = 8 A = 4, B = 9
A = 5, B = 1 A = 5, B = 3 A = 5, B = 4 A = 5, B = 6 A = 5, B = 7 A = 5, B = 9
A = 6, B = 1 A = 6, B = 2 A = 6, B = 4 A = 6, B = 5 A = 6, B = 7 A = 6, B = 8
A = 7, B = 2 A = 7, B = 3 A = 7, B = 5 A = 7, B = 6 A = 7, B = 8 A = 7, B = 9
A = 8, B = 1 A = 8, B = 3 A = 8, B = 4 A = 8, B = 6 A = 8, B = 7 A = 8, B = 9
A = 9, B = 1 A = 9, B = 2 A = 9, B = 4 A = 9, B = 5 A = 9, B = 7 A = 9, B = 8
近期评论