从数组中检索有关累积参数的元素

时间:2015-04-20 03:48:09

标签: algorithm

假设有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次检索时都会耗尽,但由于提供的数字是基于的在检索到的数量的累计数量上,如何在给出数字时确定从哪个时间开始?

我一直在思考这个问题并且真的感到沮丧。谢谢你的帮助!

1 个答案:

答案 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:希望我能正确理解这个问题。