Python中的NZEC错误

2024-05-13 20:58:29 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一段简单的代码,它假设读取n个数字,并假设打印出n个数字中有多少可以被k整除

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 

我在codechef上发现NZEC错误。有人能指出问题出在哪里吗?自从上周以来,这个NZEC错误一直困扰着我。我是python新手,在互联网上搜索了很多,但找不到任何具体的东西。我得到的答案是NZEC错误发生在堆栈大小超出限制时。但是我的代码有什么问题吗?


Tags: 答案代码inputrawif错误互联网数字
3条回答

当代码抛出异常时,codechef将向您显示NZEC。出现此错误有许多可能的原因,包括但不限于不安全的输入处理、在不存在/不正确的数据上操作、除以零。

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

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

你得到NZEC错误,因为当你在Python中输入空间分隔的整数时,它被当作一个字符串,而不是两个整数,如C、C++和java: 在您的情况下,这应该有效:

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

还要记住,在python中输入由空格分隔的整数数组是:

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

我想codechef的问题是this one。你应该考虑到n和k的值在10^7左右,这可能是你的程序的问题。

而且,n和k在同一条线上。您正在使用原始输入两次,因此您正在读取两行。这可以通过以下方法解决:

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

如果这没有帮助,可以尝试在xrange上循环,或者使用其他算法。

相关问题 更多 >