在 Python 中查找给定球所在的盒子的位置

pythonserver side programmingprogramming更新于 2025/10/15 23:08:17

假设我们有两个数组 A 和 B。A 的大小是行数,A[i] 是第 i 行的盒子数。B 是球的数组,其中 B[i] 表示球上的数字。假设球 i(值为 B[i])将被放置在一个盒子中,其起始位置为 B[i]。我们必须找到每个 B[i] 对应的框的行和列。

因此,如果输入为 A = [3, 4, 5, 6], B = [1, 3, 5, 2],则输出将为 [(1, 1), (1, 3), (2, 2), (1, 2)] 因为 B[0] = 1,则框的位置将为第 1 行,第 1 列 B[1] = 3,则框的位置将为第 1 行,第 3 列,B[2] = 5,则框的位置将为第 2 行,第 2 列,B[3] = 2,则框的位置将为第 1 行,第 2 列

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

  • len_a := size of A

  • len_b := B 的大小

  • 对于范围在 1 到 len_a 内的 i,执行

    • A[i] := A[i] + A[i - 1]

  • 对于范围在 0 到 len_b 内的 i,执行

    • row := 一个索引,我们可以在其中插入 B[i] 以保持 A 排序

    • 如果 row >= 1,则

      • box_num := B[i] - A[row - 1]

    • 否则,

      • box_num := B[i]

    • 显示一对 (row + 1, box_num)

示例

让我们看看下面的实现以便更好地理解 −

import bisect
def get_position(A, B):
   len_a = len(A)
   len_b = len(B)
   for i in range(1, len_a):
      A[i] += A[i - 1]
   for i in range(len_b):
      row = bisect.bisect_left(A, B[i])
      if row >= 1:
         box_num = B[i] - A[row - 1]
      else:
         box_num = B[i]
      print ((row + 1, box_num))
A = [3, 4, 5, 6]
B = [1, 3, 5, 2]
get_position(A, B)

输入

[3, 4, 5, 6], [1, 3, 5, 2]

输出

(1, 1)
(1, 3)
(2, 2)
(1, 2)

相关文章


有用资源