用 Python 编写程序,找出国际象棋骑士到达目标位置的最少步数

pythonserver side programmingprogramming

假设我们有两个值 r 和 c。如果国际象棋骑士被放置在无限大棋盘的起始坐标 (0, 0) 处,我们必须找出到达位置 (r, c) 所需的最少移动次数。骑士将遵循与国际象棋相同的移动方式。它会水平移动两个方格,垂直移动一个方格,或者垂直移动两个方格,水平移动一个方格。

因此,如果输入为 r = 6、c = 1,则输出为 3,红色为初始位置,绿色为最终位置,黄色为中间步骤。

为了解决这个问题,我们将遵循以下步骤 −

  • if 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

相关文章


有用资源