Google kickstart 2020 回合答错了
Google kickstart 2020 round A wrong answer
link 问题:https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ffc7/00000000001d3f56
问题
有N栋房子待售。第 i 栋房子需要 Ai 美元购买。你有 B 美元的预算要花。
您最多可以购买多少套房子?
输入
输入的第一行给出了测试用例的数量,T。接下来是 T 个测试用例。每个测试用例都以包含两个整数 N 和 B 的单行开始。第二行包含 N 个整数。第i个整数是Ai,第i个房子的成本。
输出
对于每个测试用例,输出包含 Case #x: y 的一行,其中 x 是测试用例编号(从 1 开始),y 是您可以购买的最大房屋数量。
**Limits**
Time limit: 15 seconds per test set.
Memory limit: 1GB.
1 ≤ T ≤ 100.
1 ≤ B ≤ 105.
1 ≤ Ai ≤ 1000, for all i.
**Test set 1**
1 ≤ N ≤ 100.
**Test set 2**
1 ≤ N ≤ 105.
**Sample Input**
3
4 100
20 90 40 90
4 50
30 30 10 10
3 300
999 999 999
**Sample Output**
Case #1: 2
Case #2: 3
Case #3: 0
在示例案例 #1 中,您的预算为 100 美元。 20 + 40 = 60 美元可以买到第 1 套和第 3 套房子。
在示例案例 #2 中,您的预算为 50 美元。 30 + 10 + 10 = 50 美元可以购买第 1、3 和 4 栋房子。
在示例案例 #3 中,您的预算为 300 美元。你不能买任何房子(所以答案是 0)。
这是我的解决方案(Python 3):
T = int(input())
res = []
for i in range(T):
N, B = map(int, input().split(' '))
ai = list(map(int, input().split(' ')))
ai.sort()
for k in range(len(ai)):
B = B - ai[k]
if B < 0:
res.append(k)
break
elif k == len(ai)-1:
res.append(k+1)
for i in range(T):
print("Case #", i+1, ":", res[i])
我已经尝试了所有我能想到的测试用例,并且得到了预期的输出。但是当我尝试提交时,它显示样本失败:错误答案。请让我知道我的解决方案到底有什么问题以及如何改进它。
我认为问题出在你最后的打印语句中,你有:
>>> print("Case #", i+1, ":", res[i])
Case # 0 : 2
请注意,在“#”之后和“:”之前多了一个 space,而不是比赛指定的内容。尝试:
>>> print("Case #", i+1, ": ", res[i], sep="")
Case #0: 2
我建议稍微简化您的代码并确保使用字符串格式。如果是 python 3.6 及更高版本,您可以使用 f-string 或使用 string.format
# your second for loop
counter = 0
for k in ai:
if B - k >= 0:
B -= k
counter += 1
else:
res.append(counter)
break
for i in range(len(res)):
# using f-string
print(f"Case #{i+1}: {res[i]}")
# using string format
print("Case #{}: {}".format(i+1, res[i]))
THIS SOLUTION IN PYTHON 3
n = int(input())
h = []
for i in range(n):
N, B = map(int,input().split())
B = int(B)
d = []
a = 0
n = sorted(list(map(int,input().split()[:N])))
for j in n:
if j <= B:
B = B-j
a+=1
h.append("Case #{}: {}".format(i+1,a))
for i in h:
print(i)
link 问题:https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ffc7/00000000001d3f56
问题 有N栋房子待售。第 i 栋房子需要 Ai 美元购买。你有 B 美元的预算要花。 您最多可以购买多少套房子?
输入 输入的第一行给出了测试用例的数量,T。接下来是 T 个测试用例。每个测试用例都以包含两个整数 N 和 B 的单行开始。第二行包含 N 个整数。第i个整数是Ai,第i个房子的成本。
输出 对于每个测试用例,输出包含 Case #x: y 的一行,其中 x 是测试用例编号(从 1 开始),y 是您可以购买的最大房屋数量。
**Limits**
Time limit: 15 seconds per test set.
Memory limit: 1GB.
1 ≤ T ≤ 100.
1 ≤ B ≤ 105.
1 ≤ Ai ≤ 1000, for all i.
**Test set 1**
1 ≤ N ≤ 100.
**Test set 2**
1 ≤ N ≤ 105.
**Sample Input**
3
4 100
20 90 40 90
4 50
30 30 10 10
3 300
999 999 999
**Sample Output**
Case #1: 2
Case #2: 3
Case #3: 0
在示例案例 #1 中,您的预算为 100 美元。 20 + 40 = 60 美元可以买到第 1 套和第 3 套房子。 在示例案例 #2 中,您的预算为 50 美元。 30 + 10 + 10 = 50 美元可以购买第 1、3 和 4 栋房子。 在示例案例 #3 中,您的预算为 300 美元。你不能买任何房子(所以答案是 0)。
这是我的解决方案(Python 3):
T = int(input())
res = []
for i in range(T):
N, B = map(int, input().split(' '))
ai = list(map(int, input().split(' ')))
ai.sort()
for k in range(len(ai)):
B = B - ai[k]
if B < 0:
res.append(k)
break
elif k == len(ai)-1:
res.append(k+1)
for i in range(T):
print("Case #", i+1, ":", res[i])
我已经尝试了所有我能想到的测试用例,并且得到了预期的输出。但是当我尝试提交时,它显示样本失败:错误答案。请让我知道我的解决方案到底有什么问题以及如何改进它。
我认为问题出在你最后的打印语句中,你有:
>>> print("Case #", i+1, ":", res[i])
Case # 0 : 2
请注意,在“#”之后和“:”之前多了一个 space,而不是比赛指定的内容。尝试:
>>> print("Case #", i+1, ": ", res[i], sep="")
Case #0: 2
我建议稍微简化您的代码并确保使用字符串格式。如果是 python 3.6 及更高版本,您可以使用 f-string 或使用 string.format
# your second for loop
counter = 0
for k in ai:
if B - k >= 0:
B -= k
counter += 1
else:
res.append(counter)
break
for i in range(len(res)):
# using f-string
print(f"Case #{i+1}: {res[i]}")
# using string format
print("Case #{}: {}".format(i+1, res[i]))
THIS SOLUTION IN PYTHON 3
n = int(input())
h = []
for i in range(n):
N, B = map(int,input().split())
B = int(B)
d = []
a = 0
n = sorted(list(map(int,input().split()[:N])))
for j in n:
if j <= B:
B = B-j
a+=1
h.append("Case #{}: {}".format(i+1,a))
for i in h:
print(i)