Python程序:查找骑士在棋盘上到达目标位置所需的最少步数
假设我们有两个值r和c。如果一个象棋骑士最初位于无限大的棋盘上的坐标(0, 0),我们需要找到它到达位置(r, c)所需的最少步数。骑士的移动方式与象棋中的骑士相同。它可以水平移动两格,垂直移动一格,或者垂直移动两格,水平移动一格。
因此,如果输入为r = 6,c = 1,则输出为3,红色为初始位置,绿色为最终位置,黄色为中间步骤。
为了解决这个问题,我们将遵循以下步骤:
- 如果r < c,则
- 交换r和c
- 如果(r, c)与(1, 0)相同,则
- 返回3
- 如果(r, c)与(2, 2)相同,则
- 返回4
- delta := r - c
- 如果c > delta,则
- 返回delta - 2 *((delta - c) / 3的商)
- 否则,
- 返回delta - 2 *((delta - c) / 4的商)
让我们看下面的实现来更好地理解:
示例
class Solution: def solve(self, r, c): if r < c: r, c = c, r if (r, c) == (1, 0): return 3 if (r, c) == (2, 2): return 4 delta = r - c if c > delta: return delta - 2 * ((delta - c) // 3) else: return delta - 2 * ((delta - c) // 4) ob = Solution() r = 6 c = 1 print(ob.solve(r, c))
输入
6, 1
输出
3
广告