【20笔试回忆题】美团,百度,搜狗(能够得分的必做题)

2020.9.5

美团

津贴兑换:津贴序列,有连续两个一样的x元的津贴可以变成x+1;这样的最后津贴序列是?

输入:序列长度n,序列a
输出:经过变换的序列

列子:

input:
5
[1, 1, 1, 1, 1]

output:3

代码:

n = 5
a = [1, 1, 1, 1, 1]

sum_con = 0
con = -1
while con != 0:
    con = 0
    pre = a[len(a) - 1]
    i = len(a)-2
    while i >= 0:
        if a[i] == pre:
            con += 1
            a[i] = pre + 1
            a.pop(i+1)
        pre = a[i]
        i = i - 1
    sum_con += con
print(sum_con)

百度

买纪念品:纪念品的属性有重量(weight),价格(price),心动值(v),共有n件纪念品;李明有预算k,最多拿m千克的礼物;

输入:第一行,n m k 第2行到n+1行每行为price weight v
输出:不超过预算和不累的情况下,最多能带的纪念品个数

列子:

input:
3 10 1000
100 5 3
50 3 2
300 3 3

output:2

# p,w,v,k,m,n

n,m,k=map(int,input().split())
data= []
for i in range(n):
    p,w,v = map(int,input().split())
    data.append({'p':p,'w':w,'v':v})

data_new = sorted(data, key=lambda x: (-x['v'], x['p']))
cnt = 0
for i in data_new:
    if i['w']< m and i['p']< k:
        cnt += 1
        m = m - i['w']
        k = k - i['p']
    else:
        break
print(cnt)

搜狗

游戏道具兑换礼物:游戏中有道具(A,B,C),任意两个道具可以兑换一个道具,三个不同道具可以兑换一个礼物,求他最多能兑换礼物的个数

输入:A,B,C的个数
输出:最多能兑换礼物的个数

列子:

input: 4 4 2

output:3

# 需要耐心和细心的方法
def test(a,b,c):
    data = [a,b,c]
    cnt = min(data)
    data= [x-cnt for x in data]
    tmp_data = [i for i in data if i > 1]
    while data.count(0) != 3:
        # 没有一个大于1,无法满足兑换条件
        if tmp_data == []:
            return cnt
        # 一个0,两个大于1,这两个各给一个作为兑换
        elif data.count(0)==1 and len(tmp_data) == 2:
            ind_0 = data.index(0)
            data = [x - 2 for x in data]
            cnt += 1
            data[ind_0]=0
            tmp_data = [i for i in data if i > 1]
        # 两个0,一个大于1
        elif data.count(0) == 2:
            # 两个0,一个大于1小于5,不满足兑换条件
            if tmp_data[0] < 5:
                break
            else:
                ind_1 = data.index(tmp_data[0])
                ind_0 = data.index(0)
                data = [x - 5 for x in data]
                data[ind_0] = 0
                data[ind_1] = 0
                cnt += 1
                tmp_data = [i for i in data if i > 1]
        # 一个0,一个1,一个大于1
        elif data.count(0) == 1 and len(tmp_data) == 1:
            # 一个0,一个1,一个大于1但小于3,不满足兑换条件
            if tmp_data[0] < 3:
                return cnt
            # 一个0,一个1,一个大于3
            else:
                ind_1 = data.index(1)
                ind_0 = data.index(0)
                data = [x - 3 for x in data]
                data[ind_0] = 0
                data[ind_1] = 0
                cnt += 1
                tmp_data = [i for i in data if i > 1]
    return cnt


if __name__ == '__main__':
    a,b,c = 4,4,2
    print(test(a, b, c))
    a, b, c = 9, 3, 3
    print(test(a, b, c))
    a, b, c = 5,7, 3
    print(test(a, b, c))

猜你喜欢

转载自blog.csdn.net/qq_34391511/article/details/108424522
今日推荐