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

时间:2020-03-22 09:15:11

标签: python python-3.x optimization greedy

我参加了Kick Start并尝试了以下问题:

问题

有N栋房屋待售。第i座房子要花艾美金购买。您的预算预算为B美元。

您最多可以购买多少间房屋?

输入

输入的第一行给出测试用例的数量,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

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

在该解决方案不起作用的地方是否存在任何测试集?

5 个答案:

答案 0 :(得分:0)

有一个问题:如果可以购买所有房屋,则代码不会打印任何内容。 您可以通过在内部循环之后移动print("Case #{0}: {1}".format(case+1, c))行来解决此问题。

答案 1 :(得分:0)

考虑这个已接受的

#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) ;
    }
}


答案 2 :(得分:0)

这是经过测试的解决方案-

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')

答案 3 :(得分: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]))

答案 4 :(得分:0)

#接受的代码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)))