2015-04-20 67 views
2

假設有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在每次檢索時耗盡,而列表2在每次檢索時耗盡,但是因爲提供的數量基於在檢索到的數字的累計計數上,如何確定在給定數字的情況下從哪裏開始?

我一直在想這幾天,真的感到沮喪。謝謝你的幫助!

回答

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:希望我對問題有正確的理解。