2011-12-26 67 views
1

編輯:嘿,我得到了答案。正確的代碼寫在下面。正如答案所寫,我應該保持代碼在試圖/除了塊 我正試圖解決在SPOJ網站上的「3n + 1」a.k.a Collat​​z猜想問題。 http://www.spoj.pl/problems/CLTZ/。這是我寫的代碼:編輯Collat​​z SPOJ-蟒蛇 - 給NZEC錯誤

import sys,os 
#This is for the Collatz Conjecture problem in SPOJ. 
while 1: 
    try: 
     line = sys.stdin.readline() 
     n=int(line) 
    except: 
     break 
    #print 'Line=',line 

    #n=int(line) 
    if(n==1): 
     print n 
     continue 
    else: 
     count=0 
     while(n!=1): 
      if(n%2==0): 
       n = n/2 
       count=count+1 
      else: 
       n= 3 * n + 1 
       count=count+1 
    print count+1 

我遇到了NZEC錯誤。我嘗試過的一些測試用例如下:

123123 
181 
235 
128 
346 
33 
234 
22 
123 
47 
123 
47 
123 
47 
235 
128 
34 
14 
325 
25 
1234 
133 
123 
47 
125 
109 

我做了一些處理換行符的改變。它仍然給出了一個錯誤:( 請讓我知道我要去哪裏錯了:(

回答

1

在輸入結束時,你讀一個空行, try-except或從讀線是空的循環break

while 1: 
    line = sys.stdin.readline() 
    if line == "": 
     break 
    n=int(line) 

如果上述方法無效,

while 1: 
    try: 
     line = sys.stdin.readline() 
     n = int(line) 
     #other stuff 
    except: 
     break 

應該擺脫NZEC

但是,可能您需要在時間限制內做更好的事情來解決問題,但SPOJ問題很少允許使用天真的方法。

+0

嘿,我改變了處理換行符。它仍然給出了相同的NZEC的東西:(我也嘗試過,如果(不是行):break。但是這也給出了相同的東西 – crazyaboutliv 2011-12-26 19:11:19

+0

'try-except'(現在添加)工作嗎? – 2011-12-26 19:26:34

+0

是的,謝謝:)它確實 – crazyaboutliv 2011-12-28 10:59:38

0

我發現到現在最好的辦法是這樣的

import sys 
for k in sys.stdin: 
k = int(k) 
if k==1: 
    print k 
    #.... rest of the code 

希望這有助於

0

因爲像C語言是空白敏感而採取的輸入,有時測試用例SPOJ包含額外的空格。以下是採取輸入(以避免NZEC)SPOJ問題的一種通用方法。

import sys 
tokenizedInput = sys.stdin.read().split() # Tokenize by white spaces 

例如,如果輸入數據是這樣的 -

3 
2 4 
5 6 stfas 
abcd 

tokenizedInput將是[ '3', '2', '4', '5', '6', 'stfas','abcd']。然後您可以使用它來讀取輸入數據。