编程与逻辑的舞蹈:最小步数棋盘问题的解决之道

原题目

在一个 8x8 的棋盘中,每个格子交替着黑白两色。现在有一个棋子放在格子 (A,B) 上,要求编写一个程序计算棋子到达格子 (P,Q) 所需的最少步数,条件是每一步棋子只能移动到一个与当前格子颜色不同的格子上。

示例输入输出
输入

3
2 2 3 3
4 2 4 5
5 2 5 2

输出

1
2
0

解题思路

我的解题思路基于对棋盘颜色的规律性理解:格子的颜色取决于其坐标之和的奇偶性。如果两个格子的坐标之和一奇一偶,则它们颜色不同。因此,如果起点和终点坐标之和的奇偶性相同,则需要至少两步才能到达(先移动到一个颜色不同的格子,再到终点)。如果它们一奇一偶,只需一步。当然,如果起点和终点坐标相同,那么不需要移动。

解题过程

  1. 我首先实现了一个辅助函数 isSameColor,它通过判断给定两个格子的坐标之和是否同为奇数或偶数来判断它们的颜色是否相同。
  2. 然后,我编写了主函数来读取输入的测试案例数和每个案例的坐标。
  3. 对于每个案例,我使用了 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;
}
  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值