链接到问题: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
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”(运行时错误)
答案 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))