题目:

解法:

总体来说算法分为三步:
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的位置信息.
本文介绍了一种通过遍历象棋中“将”与“帅”的位置并判断两者是否处于同一直线上的算法实现方法。该算法包括三种解法:一是使用位操作;二是通过巧妙的循环变量处理;三是定义结构体并通过双重循环求解。代码示例展示了如何高效地遍历所有可能的位置。
2368

被折叠的 条评论
为什么被折叠?



