在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)