2015-11-01 68 views
0

我寫了一個程序,我輸入10例如,它找到奇數的第一個和偶數,並把它們放在一個列表[1,3,5,7,9,2,4 ,6,8,10]和輸入其選擇列表中的例如3的數量另一個號碼,以便將其打印5等,所以我寫像內存錯誤在Python中使用intertool

from itertools import count 
n,y=map(int, raw_input().split()) # Input the 2 numbers 
listaa=[0,] # list to save 
for x in count(1,1): 
    if x%2!=0: 
     listaa.append(x) 
    if x==n: 
     break 
for h in count(1,1): 
    if h%2==0: 
     listaa.append(h) 
    if h==n: 
     break 
res=listaa[y] 
print res # it print the number that is in the Array or list 

一個代碼,但是當我提交的代碼在在線評判它嘗試這個數字1000000000000 500000000001所以它得到RUNTIME_ERROR然後我嘗試這在我的eclipse我得到內存錯誤注意我第一次嘗試Xrange但我得到錯誤,當我搜索發現發電機,所以我嘗試它,並使用計數,而不是Xrange筆記每個測試用例的運行時間限制爲1秒

+1

爲什麼要建立名單?如果你想要的只是一個給定位置的數字,那麼一個小數學就可以做到。 – tdelaney

+0

請告訴我怎麼做 –

回答

0

你不能用這種方法解決這個問題,因爲列表非常大,它也會限制你提示的測試用例1000000000000 500000000001包含大約4 * 10^12個數字,這需要超過1TB的內存。 所以不要用列表來代替使用數學公式。

示例代碼

n,y=map(int, raw_input().split()) 
first_odd = 1 
last_odd = n if n%2 == 1 else n-1 
n_odd = (last_odd-first_odd)/2 + 1 
if y <= n_odd: 
    print first_odd + 2*(y-1) 
else: 
    y -= n_odd 
    print 2+2*(y-1) 
+0

你是對的問題是數學,但你能告訴我什麼是我可以工作的方程式,以得到解決方案 –

+0

好吧,讓a是列表中的第一個奇數b最後一個奇數。如果y <= n_odd,則n_odd = b-a + 1,那麼它是具有值a +(y-1)* 2的奇數。同樣可以應用於偶數,但偶數的索引將是y-n_odd – m7mdbadawy

+0

您也可以實施Eratosthenes篩。 https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes – mic4ael