在Python中找到占据给定球的盒子的位置

假设我们有两个数组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,则框位置将为第一行,第一列B [1] = 3,则框位置将为第一行,第三列,B [2] = 5,则框位置将为第二行,第二列,B [3] = 2,则框位置将为第一行,第二列

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

  • len_a:= A的大小

  • len_b:= B的大小

  • 对于范围在1到len_a中的我,执行

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

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

    • box_num:= B [i]

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

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

    • 如果行> = 1,则

    • 除此以外,

    • 显示一对(行+ 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)
    猜你喜欢