CodeChef“Double Strings”错误答案

时间:2014-11-15 06:56:14

标签: python

我的代码给出了错误的答案(根据判断),我无法弄清楚为什么(第二个代码)。几天前我刚开始在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() 

我无法弄清楚为什么我的其他解决方案(下面)被拒绝,原因是错误的答案,即使它做同样的事情(根据我)。有没有它从上面的代码中提供不同的输出?

Link to the problem statement

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()

1 个答案:

答案 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'