我的代码给出了错误的答案(根据判断),我无法弄清楚为什么(第二个代码)。几天前我刚开始在CodeChef上解决一系列简单的问题。
双字符串是前半部分等于后半部分的字符串(字符串的长度是偶数)。问题陈述是通过删除和改变长度为N的回文符号的顺序来找出可以获得的最大可能字符数。
示例输入的第一行包含整数T - 测试用例的数量。然后,T行跟随。每一行由一个整数N组成 - 回文的长度。
显然,如果回文长度均匀,则双串的长度为N.如果回文的长度为奇数,则输出应为N-1。
从以下给出的一个解决方案中也可以看出这一点:
def main():
t = int(raw_input())
for i in xrange(t):
n = int(raw_input())
if n%2:
print (n-1)
else:
print n
if __name__ == "__main__":
main()
我无法弄清楚为什么我的其他解决方案(下面)被拒绝,原因是错误的答案,即使它做同样的事情(根据我)。有没有它从上面的代码中提供不同的输出?
def main():
t = int(raw_input())
for i in xrange(t):
n = raw_input()
if n[-1] in '02468':
print int(n)
else:
print (int(n)-1)
if __name__ == "__main__":
main()
答案 0 :(得分:0)
您的奇数/偶数检查错误,因为raw_input()
可以返回由空格包围的数字。
>>> n = raw_input()
12
>>> n
'12 '
>>> n[-1] in '02468'
False
>>> int(n) % 2 == 0
True
如您所见,已接受的解决方案可以处理带空格的输入,而解决方案则无法处理。
要解决此问题,请使用n = raw_input().strip()
请注意,在真正的Python编程中,您应该始终使用int(n) % 2
检查,因为它简单明了,效率高,不会接受错误的输入,例如'abc22'
。