Google-Kick Start,ROUND-A,分配:- 跳过测试集

Google-Kick Start, ROUND-A, Allocation:- Test set skipped

我参加了 Kick Start 并尝试了这个问题:

问题

有N栋房子在售。第 i 栋房子需要 Ai 美元购买。您的预算为 B 美元。

最多可以买几套房子?

输入

输入的第一行给出了测试用例的数量,T。接下来是T个测试用例。每个测试用例都以包含两个整数 N 和 B 的单行开始。第二行包含 N 个整数。第i个整数是Ai,第i栋房子的造价。

输出

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

完整问题:- https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ffc7/00000000001d3f56

这是我的代码

t = int(input())
if 1 <= t <= 100:
    for case in range(t):
        n, b = map(int, input().split())
        a = map(int, input().split())
        s, c = 0, 0
        for i in sorted(a):
            s += i
            if s <= b:
                c += 1
            else:
                print("Case #{0}: {1}".format(case+1, c))
                break

我一直在跳过测试集,我只想知道我的代码有什么问题?

是否存在此解决方案不起作用的任何可能的测试集?

有一个问题:如果所有的房子都可以买,代码不打印任何东西。 您可以通过简单地在内部循环之后移动行 print("Case #{0}: {1}".format(case+1, c)) 来解决这个问题。

考虑一下这个接受的,

#include <bits/stdc++.h>

using namespace std ;
int main() {
    int t ; cin >> t ;
    for(int cs = 1 ; cs <= t ; cs ++) {
        int n , b , cnt = 0 ; cin >> n >> b ;
        vector<int> a(n) ; for(int i = 0 ; i < n ; i ++) cin >> a[i] ;
        sort(a.begin(), a.end()) ;
        for(int i = 0 ; i < n ; i ++) {
            if(a[i] > b) break ;
            else {
                b -= a[i] ;
                cnt ++ ;
            }
        }
        printf("Case #%d: %d\n", cs, cnt) ;
    }
}


Here is the tested solution -

tc = int(input())
for i in range(tc):
    n, budget = map(int, input().split())
    prices = list(map(int, input().split()))
    prices.sort()
    for j in range(n, 0, -1):
        if sum(prices[: j]) <= budget:
            print("Case #" + str(i+1) + ': ' + str(len(prices[: j])))
            break
    else: print("Case #" + str(i+1) + ': 0')

当预算足以购买所有房屋时,您的代码将失败。

以下是接受的python代码:

n = int(input())
if ((n>=1 and n<=100) or (n>=1 and n<=10**5)):
    z = []
    for i in range(0, n):
      x = [int(w) for w in input().split()]
      y = [int(j) for j in input().split()]
      y.sort()
      a = 0
      count = 0
      if sum(y) > x[1]:
        for k in range(0, len(y)):
          if (a == 0 and y[k]>x[1]):
            break
          elif (a <= x[1]):
            a+= y[k]
            count+=1
            if (a + y[k+1] > x[1]):
              break
        z.append(count)
      else:
        z.append(len(y))
    for i in range(0, n):
      print("Case #"+ str(i+1) +": " + str(z[i]))

#接受码Python

t = int(input())
for j in range(t):
    n,b = map(int,input().split())
    n = list(map(int, input().split()))
    n.sort()
    s=0
    ans=[]
    for i in n:
        s = s+i
        if s<=b:
            ans.append(s)
    print("Case #{}: {}".format(j+1,len(ans)))