Google Kick Start 2020 Round A错误答案

时间:2020-10-20 15:27:37

标签: python python-3.x

链接到问题:https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ffc7/00000000001d3f56

问题 有N栋房屋待售。第i座房子要花艾美金购买。您的预算为B美元。您最多可以购买多少间房屋?

输入 输入的第一行给出测试用例的数量,T。每个测试用例均以包含两个整数N和B的一行开始。第二行包含N个整数。第i个整数是Ai,即第i个房子的成本。

输出 对于每个测试用例,输出一行包含案例#x:y,其中x是测试用例编号(从1开始),y是您可以购买的最大房屋数量。

限制

时间限制:每个测试集15秒。

内存限制:1GB。

  • 1≤T≤100。
  • 1≤B≤105。
  • 对于所有i,
  • 1≤Ai≤1000。

测试集1

1≤N≤100。

测试集2

1≤N≤105。

样本输入

3
4 100
20 90 40 90
4 50
30 30 10 10
3 300
999 999 999

示例输出

Case #1: 2
Case #2: 3
Case #3: 0

在示例案例1中,您的预算为100美元。您可以以20 + 40 = 60美元的价格购买第一和第三座房屋。在示例案例2中,您的预算为50美元。您可以以30 + 10 + 10 = 50美元的价格购买第一,第三和第四座房屋。在示例案例3中,您的预算为300美元。您无法购买任何房屋(因此答案为0)。

这是我在Python 3中的解决方案:

for i in range(int(input())):
    n, b = map(int, input().split())
    a = list(map(int, input().split()))
    a.sort()
    num = 0
    count = 0
    while num < b:
        num += a[count]
        count += 1
    thei = i + 1
    if num == b:
        print("Case #" + str(thei) + ": " + str(count))
    else:
        cout = count - 1
        print("Case #" + str(thei) + ": " + str(cout))

我看不到任何错误,但是它一直显示“ RE”(运行时错误)

the error

1 个答案:

答案 0 :(得分:0)

当可以购买所有房屋并且您仍然有预算时,就会出现问题。在这种情况下,while循环将继续,并且a[count]将成为a中的无效访问。

如果不做过多修改,就可以在while循环中添加一个附加条件:and count < len(a)。循环后,还需要将if条件更改为if num <= b

另一种解决方案

以上内容将解决您的问题。尽管如此,变量名还不清楚。输出有重复的代码;如果要减少迭代的预算,我们可以不使用num变量;以及为什么不使用for循环而不是while循环:

for case in range(int(input())):
    _, budget = map(int, input().split())
    prices = list(map(int, input().split()))
    prices.sort()
    for house, price in enumerate(prices):
        if budget < price:  # cannot buy this house
            break
        budget -= price
    else:  # all houses can be bought
        house = len(prices)
    print("Case #{}: {}".format(case + 1, house))