Collat​​z SPOJ- python - 给出NZEC错误

时间:2011-12-26 15:49:24

标签: python

编辑:嘿,我得到了答案。正确的代码写在下面。正如答案所写,我应该将代码保存在try / except块中 我想在SPOJ网站上解决“3n + 1”a.k.a Collat​​z猜想问题。 http://www.spoj.pl/problems/CLTZ/。以下是我写的代码: 编辑

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

我做了改变,负责换行符。它仍然给出一个错误:( 请让我知道我哪里错了:(

2 个答案:

答案 0 :(得分:1)

在输入结束时,您读取一个空行,将其转换为int会引发异常。当读取行为空时,只需将代码包装在循环的try-exceptbreak中。

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问题很少允许天真的方法。

答案 1 :(得分:0)

由于C语言在输入时对白色空间不敏感,因此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']。然后,您可以使用它来读取输入数据。