这个题目被《编程之美》标注为三颗星难度。事实上是很简单的问题。
大体意思是假设中国象棋棋盘上只有将和帅,写程序输出将帅在棋盘上的所有合法位置(将帅不能照面,并且只能在棋盘田字格里移动),要求只能使用一个变量。
后面又标定了将帅田字格的位置,如下图:

书上介绍的做法很复杂,我没看,用很多宏定义动态定义很多位运算,我懒得看了,下面放上我自己的做法:
#include <stdio.h>
typedef struct
{
unsigned char a:4;
unsigned char b:4;
}BYTE;
void main()
{
BYTE i;
for(i.a = 1; i.a <= 9; i.a++)
{
for(i.b = 1; i.b <= 9; i.b++)
if((i.b - i.a) % 3) //差比余3,这样可以使列不冲突
printf( "A= %d, B= %d\n", i.a, i.b);
}
}
以下是结果:
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