2011-01-01 编程之美 1.2 中国相帅问题的一个简洁解法
题目意思大概是,象棋棋盘上只有一相一帅,只能在9宫格内移动,且不能对面。要求给出相帅所有的位置的可能性,只能用一个变量。
只用一个变量,第一感是用位操作。给九宫格编个号:
1
1 2 3
2
4 5 6
3
7 8 9
Copied!
遍历所有的位置,如果 位置编号 mod 3相同,说明在同一列中。按此思路,书中位操作的解法略显繁杂。这里一个简洁的的解法是:
1
void main()
2
{
3
short unsigned int x;
4
for (x = 0; (x & 0xF0) < 0x90; x += 0x10 ) {
5
for ( x &= 0xF0; (x & 0x0F) < 9; x++)
6
if ((x >> 4) % 3 != (x & 0x0F) % 3)
7
printf("A = %d, B = %d\n", (x >> 4) + 1, (x & 0x0F) + 1);
8
}
9
}
Copied!
如果不用位操作的话,另外一个解法比较赞:
1
BYTE i = 81;
2
while (i--)
3
{
4
if (i / 9 % 3 != i % 9 % 3)
5
printf("A = %d, B = %d\n", i / 9 + 1, i % 9 + 1);
6
}
Copied!
最近更新 1yr ago
复制链接