2011-12-26 10 views
1

編集:ねえ、私は答えを得た。正しいコードは以下に書かれています。答えとして書かれているように、私はtry/exceptブロックにコードを残しておくべきでした。 私はSPOJサイトで "3n + 1" a.k.a Collat​​z推測の問題を解決しようとしています。 http://www.spoj.pl/problems/CLTZ/EDITCollat​​z SPOJ- Python - 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

を入力の終わりに私に知らせてください、あなたはintに例外を発生させることを変換する、空行を読んで。ただ、中にあなたのコードをラップ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のものを提供しています:(私はまた、(行ではない)をやってみました:ブレークしかし、それは同じものを与える – crazyaboutliv

+0

'try-except'(今追加されました)は機能しますか? –

+0

はい、ありがとう:) – crazyaboutliv

0

私が今までに発見した最良の方法は、入力を服用しながら、Cのような言語は、小文字を区別しない空白なので、これは

0

を助け、この

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

希望で、時々SPOJのテストケースは、余分な空白が含まれています。ここでは、SPOJの問題の入力を(NZECを避けるために)取る一般的な方法があります。あなたの入力データがこのようなものであれば

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']これを使用して、入力データを読み取ることができます。

関連する問題