2012-02-25 76 views
4

这是它想读n个数,并假设打印多少个号码的开出这n个数字是用kNZEC错误在Python

n=int(raw_input()) 
k=int(raw_input()) 
ans=0 
while n > 0: 
    t=int(raw_input()) 
    if(t%k == 0): 
    ans = ans + 1 
    n = n - 1 
print ans 

我得到了NZEC错误整除一个简单的代码块这在codechef上。有人能指出问题在哪里吗?自上周以来,这个NZEC错误让我非常困扰。我是python的新手,并在互联网上搜索了很多,但没有找到具体的东西。当堆栈大小超出限制时,我得到了NZEC错误的答案。但是我的代码有什么问题?

回答

5

我想代码的问题是this one。你应该考虑到n和k的值大约是10^7,这可能是你的程序有问题。

另外,n和k在同一行上。您使用raw_input两次,所以您正在阅读两行。这可以通过使用来解决:

n, k = raw_input().split(" ") 
n = int(n) 
k = int(k) 

如果这不会帮助,你可以尝试循环执行xrange代替,或者使用不同的算法。

1

当你的代码抛出一个异常时,codechef会告诉你一个NZEC。发生此错误的原因很多,包括但不限于不安全的输入处理,对不存在/不正确的数据进行操作,除以零。

在你的情况下,问题可以通过Reshure提到的来解决。虽然处理其他案件将会是特定于代码的,但我们可以通过编程来避免由于不安全的输入处理而导致的NZEC。这个想法是立即读取输入并使用空格作为分隔符来标记它。

import sys 
tokenizedInput = sys.stdin.read().split() # Delimit input by whitespaces 
# Now iterate over tokenizedInput. 

在你的情况,这将是如下:

n, k = map(int, tokenizedInput[:2]) 
ans = 0 
for _ in xrange(2, n): 
    t = int(tokenizedInput[_]) 
    if t%k == 0: 
     ans = ans + 1 
print ans 
0

对于pyth-3.4

n,k=[int(x) for x in input().split()] 
count=0 
while n>0: 
    n-=1 
    tmp=int(input()) 
    if tmp%k==0: 
     count+=1 
print (count) 
1

,因为当你在Python输入空格隔开的整数你得到NZEC错误时被视为单个字符串,而不是像C,C++和Java中的两个整数: 在您的情况下,这应该工作:

n,k=map(int,raw_input().split()) 

此外,在未来的记得,输入由在python空格分隔的整数数组是:

a=map(int,raw_input().split())