题目:
![](https://img-my.csdn.net/uploads/201210/23/1350957297_5438.jpg)
解法:
![](https://img-my.csdn.net/uploads/201210/23/1350957301_9068.jpg)
总体来说算法分为三步:
1.遍历A的坐标。
2.遍历B的坐标。
3.判断A,B是否在一条直线。
解法一的思想就是使用一个byte来解决,高4位存储"将的位置",低4位储存"帅"的位置.然后再执行位操作进行判断。
解法三定义了一个结构体,结构里里a,b分别储存将帅的位置.然后两个for循环求解。
解法二比较有意思.非常巧妙的用一个循环变量解决该问题。
#include <stdio.h>
void main()
{
unsigned int i = 81;
int sum = 0;//int是我自己加上去统计个数的,加不加都行.去掉不影响程序的正确性
while(i--)
{
if(i / 9 % 3 == i % 9 %3)
continue;
sum ++;
printf("A=%d,B=%d\n", i / 9 + 1, i % 9 +1);
}
printf("sum = %d\n", sum);
}
1.A的位置是0-8中的任意一个
2.B的位置也是0-8中任意一个
3.利用i/9的商存储A的位置信息,利用i%9余数储存B的位置信息.