题目:
中国象棋里面双方的“将”和“帅”各自呆在自己的九宫格里,一步只能横移或纵移一格,而且双方不能见面(既不能处在同一条纵线上)。在残局时有的人会用这一规则走出绝妙杀招。假设一方的“将”为A,另一方的“帅”为B,现在求双方所能出现的所有合法位置,所需变量只能用一个字节来保存。
分析:
两个象棋,每个棋子有9个位置,一个字节有八个二进制位,假设平均四个位,2的4次方是16,足够存放所有情况。
/*
问题描述:
A、B二子被限制在己方3×3的各自里运动。请写出一个程序,输出A、B所有合法位置。要求在代码中只能使用一个字节存储变量
A、B两子不能面对面,或者是处于同一直线上。
*/
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
struct Node
{
unsigned char a : 4;
unsigned char b : 4;
};
void fun(Node &n)
{
for (n.a = 1; n.a < 10; n.a++)
{
for (n.b = 1; n.b < 10; n.b++)
{
if (n.a%3==n.b%3)
continue;
cout << "a=" << (int)n.a << " b=" << (int)n.b+9 << endl;
}
}
}
int main(void)
{
Node n;
fun(n);
cout << endl;
system("pause");
return 0;
}