2022秋招-京东-数据分析师笔试-编程题

题目一

题目描述
有若干个数形成一个可重集合,它们中很多都想做一个中庸的数,即既不是集合中最大的(或之一),也不是集合中最小的(或之一)。显然,不可能满足所有数。好在还是有一些数并不介意这一点。你需要从这些数中选出一个可重的子集,该子集中介意成为最值的数都得到满足(指不能成为子集中的最值)。请计算可以取的最大可重子集的大小。

输入描述
第一行一个整数 n,1 <= n <= 100000
后面 n 行,每行两个整数 x, y,x <= 1000000000,y 为 0 或 1。x 表示该数的值,y 为 1 表示该数不介意成为最值,为 0 则表示介意。

输出描述
一个整数,表示可取的最大的子集大小

样例输入
5

4 1

2 0

8 1

9 0

5 0

样例输出
3

#索引、排序、掐头去尾
n = int(input())
arr = []
for _ in range(n):
    x, y = map(int, input().split())
    arr.append((x, y))

arr.sort()

res = 0
for i in range(len(arr)):
    if arr[i][1] == 0:
        res += 1
    else:
        break

for i in range(len(arr)-1, -1, -1):
    if arr[i][1] == 0:
        res += 1
    else:
        break

print(len(arr)-res)
5
4 1
2 0
8 1
9 0
5 0
3

题目二

题目描述
分竹子

小熊猫分竹子,竹子长n,分成k段,每段的长度可以为a,b,c

要求k尽可能大。

样例输入
6 2 3 4

样例输出
3

解释
长6 的竹子,分成3段,每段为2.

#用n长不断减去给到的a,b,c,看那个可以减得次数多即可。
def divide_bamboo(n, a, b, c):
    k = 0
    while n > 0:
        if n >= a:
            n -= a
            k += 1
        elif n >= b:
            n -= b
            k += 1
        elif n >= c:
            n -= c
            k += 1
        else:
            break
    return k

n, a, b, c = map(int, input().split())
print(divide_bamboo(n, a, b, c))
6 2 3 4 
3

posted @ 2023-02-24 22:53  AubeLiang  阅读(76)  评论(0编辑  收藏  举报