假设有2个元素数组,函数调用将返回其中的元素。每次执行检索时,将从阵列1中检索8个元素,而从阵列2中检索2个元素。要检索的元素由提供的数字表示,假设列表1具有35个元素,列表2具有7,情况将如下:
Assume the 2 arrays are:
array 1: 0, 1, 2, 3, 4, ..., 35
array 2: 0, 1, 2, 3, 4, 5, 6
number provided elements from array 1 elements from array 2
1 0, 1, 2, 3, 4, 5, 6, 7 0, 1
11 8, 9, 10, 11, 12, 13, 14, 15 2, 3
21 16, 17, 18, 19, 20, 21, 22, 23 4, 5
31 24, 25, 26, 27, 28, 29, 30, 31 6
40 32, 33, 34, 35 0, 1
46 0, 1, 2, 3, 4, 5, 6, 7 2, 3
56 8, 9, 10, 11, 12, 13, 14, 15 4, 5
66 16, 17, 18, 19, 20, 21, 22, 23 6
75 24, 25, 26, 27, 28, 29, 30, 31 0, 1
85 32, 33, 34, 35 2, 3
...
每次检索完成后,返回的数字计数将被添加到最后提供的数字成为下一个提供的数字。如果列表中的一个用尽(剩余元素少于8),则将从该列表中检索剩余的数字,并且下次它将再次从索引0开始检索元素,如通过编号31和40的情况
问题是,无论如何要确定在提供数字时两个阵列中的起始位置是什么?例如当给出数字40时,我应该从列表1中的32开始,列表2中的0开始。如上面的情况,列表1每5次检索就会耗尽,而列表2在每次第4次检索时都会耗尽,但由于提供的数字是基于的在检索到的数量的累计数量上,如何在给出数字时确定从哪个时间开始?
我一直在思考这个问题并且真的感到沮丧。谢谢你的帮助!
答案 0 :(得分:1)
他们是一个循环。一个周期将有total_num
个数字,我们可以从以下代码中获取total_num
:
def get_one_cycle_numbers:
n = len(a) / 8
m = len(b) / 2
g = gcd(n, m)
total_num = len(a) * n / g + len(b) * m / g
return total_num
当我们得到提供的数字num
时,我们只需num = num % total_num
并模拟周期。
PS:希望我能正确理解这个问题。