这是一段简单的代码,假设读取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错误的答案。但是我的代码有什么问题?
答案 0 :(得分:5)
我认为codechef问题是this one。您应该考虑到n和k的值大约是 10 ^ 7 ,这可能是您的程序出现问题。
此外,n和k在同一行。您正在使用 raw_input 两次,因此您正在阅读两行。这可以通过使用:
来解决n, k = raw_input().split(" ")
n = int(n)
k = int(k)
如果这样做无效,您可以尝试循环使用 xrange ,或使用其他算法。
答案 1 :(得分: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
答案 2 :(得分:1)
您收到NZEC错误,因为当您在python中输入空格分隔的整数时,它被视为单个字符串而不是C,C ++和Java中的两个整数: 在你的情况下,这应该工作:
n,k=map(int,raw_input().split())
同样在将来记住,输入一个在python中用空格分隔的整数数组是:
a=map(int,raw_input().split())
答案 3 :(得分: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)
答案 4 :(得分:0)
尝试一下,除了我在我的CODECHEF代码中所做的以外,它的工作原理
try:
n , k = map(int , input().split())
ans=0
while n > 0:
t=int(input())
if(t%k == 0):
ans = ans + 1
n = n - 1
print(ans)
except:
pass