Computer >> Máy Tính >  >> Lập trình >> Python

Tìm vị trí của hộp chiếm bóng đã cho bằng Python


Giả sử chúng ta có hai mảng A và B. Kích thước của A là số hàng và A [i] là số hộp trong hàng thứ i. Và B là mảng các quả bóng trong đó B [i] biểu thị một số trên quả bóng. Cho rằng quả bóng i (giá trị B [i]) sẽ được đặt trong một hộp có vị trí từ đầu là B [i]. Chúng ta phải tìm hàng và cột của các hộp tương ứng với mỗi B [i].

Vì vậy, nếu đầu vào là A =[3, 4, 5, 6], B =[1, 3, 5, 2], thì đầu ra sẽ là [(1, 1), (1, 3), ( 2, 2), (1, 2)] là B [0] =1, thì vị trí hộp sẽ là hàng thứ nhất, cột thứ nhất B [1] =3, sau đó vị trí hộp sẽ là hàng thứ nhất, cột thứ 3, B [2] =5, thì vị trí hộp sẽ là hàng thứ 2, cột thứ 2, B [3] =2, sau đó vị trí hộp sẽ là hàng thứ nhất, cột thứ 2

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • len_a:=kích thước của A

  • len_b:=kích thước của B

  • đối với tôi trong phạm vi 1 đến len_a, thực hiện

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

  • đối với tôi trong phạm vi từ 0 đến len_b, thực hiện

    • row:=một chỉ mục mà chúng ta có thể chèn B [i] để duy trì A được sắp xếp

    • nếu hàng> =1, thì

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

    • nếu không,

      • box_num:=B [i]

    • hiển thị một cặp (hàng + 1, box_num)

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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)

Đầu vào

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

Đầu ra

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