原题目
在一个 8x8 的棋盘中,每个格子交替着黑白两色。现在有一个棋子放在格子 (A,B) 上,要求编写一个程序计算棋子到达格子 (P,Q) 所需的最少步数,条件是每一步棋子只能移动到一个与当前格子颜色不同的格子上。
示例输入输出
输入
3
2 2 3 3
4 2 4 5
5 2 5 2
输出
1
2
0
解题思路
我的解题思路基于对棋盘颜色的规律性理解:格子的颜色取决于其坐标之和的奇偶性。如果两个格子的坐标之和一奇一偶,则它们颜色不同。因此,如果起点和终点坐标之和的奇偶性相同,则需要至少两步才能到达(先移动到一个颜色不同的格子,再到终点)。如果它们一奇一偶,只需一步。当然,如果起点和终点坐标相同,那么不需要移动。
解题过程
- 我首先实现了一个辅助函数
isSameColor
,它通过判断给定两个格子的坐标之和是否同为奇数或偶数来判断它们的颜色是否相同。 - 然后,我编写了主函数来读取输入的测试案例数和每个案例的坐标。
- 对于每个案例,我使用了
isSameColor
函数来确定起点和终点的颜色关系,并据此决定输出的步数:如果颜色相同且位置不同,输出2;颜色不同,输出1;位置相同,输出0。
答案
#include <stdio.h>
int isSameColor(int A, int B, int P, int Q) {
return ((A + B) % 2 == (P + Q) % 2);
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
int A, B, P, Q, steps;
scanf("%d %d %d %d", &A, &B, &P, &Q);
if (A == P && B == Q) {
steps = 0;
} else if (isSameColor(A, B, P, Q)) {
steps = 2;
} else {
steps = 1;
}
printf("%d\n", steps);
}
return 0;
}