Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ค้นหาตำแหน่งของกล่องที่ครอบครองลูกบอลที่กำหนดใน Python


สมมติว่าเรามีอาร์เรย์ A และ B สองอาร์เรย์ ขนาดของ A คือจำนวนแถว และ A[i] คือจำนวนกล่องในแถวที่ ith และ 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 :=ขนาด A

  • len_b :=ขนาดของ B

  • สำหรับฉันอยู่ในช่วง 1 ถึง len_a ทำ

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

  • สำหรับฉันอยู่ในช่วง 0 ถึง len_b ทำ

    • row :=ดัชนีที่เราสามารถแทรก B[i] เพื่อรักษา A sort

    • ถ้าแถว>=1 แล้ว

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

    • มิฉะนั้น

      • box_num :=B[i]

    • แสดงคู่ (แถว + 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)