中国象棋将帅问题
下过象棋的都知道,双方的“将”和“帅”相隔遥远,并且不能照面。约定A表示“帅”,B表示“将”,二者位置可表示为
请写出一个程序,输出A、B所有合法位置。要求在代码中只能使用一个字节存储变量。
解析思路:
1、 首先想到两个For循环遍历,但要求只用一个字节存储变量,这一思路先不考虑,当然也可以取巧使用位域。
2、 观察输出,一共有81种位置组合,假设使用一个变量i来存储第i种位置组合,A和B取值1到9,那么A位置取值就是i / 9 + 1,那么B位置只能取i % 9 + 1。
源码:
#include <iostream>
using namespace std;
void methodA()
{
int i = 1;
while (i <= 81)
{
if (i / 9 % 3 != i % 9 % 3)
cout << "A" << i / 9 + 1 << "---"<< "B" << i % 9 + 1 << endl;
i++;
}
}
typedef struct
{
unsigned char a : 4;
unsigned char b : 4;
}Type;
void methodB()
{
Type i;
for (i.a = 1; i.a <= 9; i.a++)
{
for (i.b = 1; i.b <= 9; i.b++)
{
if(i.a % 3 != i.b % 3)
cout << "A" << i.a << "---" << "B" << i.b << endl;
}
}
}
int main()
{
methodA();
//methodB();
getchar();
return 0;
}