假设有 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 次检索一次就用完,但是由于提供的数字是基于关于检索到的数字的累计计数,当给定一个数字时,我如何确定这次从哪里开始?
这几天我一直在想这个问题,真的很沮丧。感谢您的帮助!
最佳答案
他们是一个循环。而一个循环会有total_num
个数,我们可以从下面的代码中得到total_num
:
def get_one_cycle_numbers:
n = len(a)/8
米 = 长度 (b)/2
g = gcd(n, m)
total_num = len(a) * n/g + len(b) * m/g
返回 total_num
当我们得到提供的数字 num
时,我们只是 num = num % total_num
并模拟循环。
PS:希望我对这个问题有正确的理解。
关于algorithm - 从数组中检索与累积参数相关的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29739030/