无法理解旧版GoogleCodeJam的解决方案

时间:2014-03-10 20:15:33

标签: python

Here是2010年Google Code Jam问题的链接。

from sys import *

def solve(_, items,p):
    for i in xrange(len(items)):
        for j in xrange(i+1,len(items)):
            if items[i] + items[j] == c:
                print "Case #%d: %d %d" %(_+1,i+1,j+1)

cases = int(raw_input())
for _ in xrange(cases):
    c = int(raw_input())
    i = int(raw_input())
    items = map(int,stdin.readline().split())
    solve(_,items,c)

在尝试自己解决问题之后,以及之后参考我在Google解决方案网站上找到的代码,其中有一部分我似乎无法弄清楚。那是第12行:

i = int(raw_input())

除了这个初始声明之外,我还没有看到它在代码中是如何被使用的。然而,如果我对该行进行注释,则代码将无法运行,从而产生以下错误:

invalid literal for int() with base 10: '5 75 25'

有人可以解释为什么需要这一行以及如何在代码中使用它?

1 个答案:

答案 0 :(得分:2)

这非常符合问题中的说明:

  

第一行输入给出了案例数,N.N测试案例如下。

cases = int(raw_input())
  

对于每个测试用例,将有:

for _ in xrange(cases):
  

一行包含值C,即您在商店的信用额度。

    c = int(raw_input())
  

一行包含值I,即商店中的商品数量。

    i = int(raw_input())
  

一行包含空格分隔的I整数列表。

    items = map(int,stdin.readline().split())

我认为,您的困惑源于评论i定义的行,而不理解设置i的副作用。 python代码不需要对i执行任何操作,因为split()无需知道有多少项(某些语言可能需要此信息,因此问题提供它),但我们仍然需要拨打raw_input()以便超越该行并阅读项目列表。

因此,您可以移除i = int(...),只需在该行上调用raw_input(),代码仍可正常运行。作者只是遵循处理输入的文档化步骤,即使solve()不需要它。