蓝桥杯等考Python(抢红包)

抢红包
题目描述:
某购物网站为提高“人气”,每天会发10个红包,参与活动的会员可以“拼手速”,打开手机APP,在3秒内点击屏幕上的红包。
每个会员“点击”红包,他(她)的名字就会被系统记录一次,但每人最多只能抢到3个红包。红包先点先得,抢完为止。
已知某天系统记录的所有点击红包的会员名单,请计算出还剩多少个红包没有被抢到。
例如:
点击红包的会员名单依次是:
Alice Bob Bob Bob Alice Bob Denis
其中Bob点击了4次,但他只能获得3个红包,有1次点击无效。
最终获得红包的会员是:Alice(2个);Bob(3个);Denis(1个)。还剩4个红包没有被抢到。
注意:
会员名字是唯一的,无重名。
输入:
一个字符串,包括若干个人名,同一人名可能出现多次,相邻两个人名用一个空格分隔,表示某天系统记录的所有点击红包的会员名单。
输出:
一个整数,为当天剩余红包的数量。
输入样例:

Alice Bob Bob Bob Alice Bob Denis

输出样例:
4

参考答案:

#参考程序1:
s = input()
lis = s.split()
p = 10 #剩余10个红包
dic = {}
for i in lis:
    if i not in dic: #如果i第一次抢到红包
        dic[i] = 1 #给i记录1次
        p -= 1
    elif p > 0 and dic[i] < 3: #如果i不是第一次抢,还没到3个,而且红包还有剩余
        dic[i] += 1 #给i增加1次
        p -= 1
    elif p > 0: #如果i已经抢到3个,不再记录
        continue
    else: #如果红包都被抢完,结束
        break
print(p)
#参考程序2:
names = input().split(" ")
dic = {}
for i in names:
    if names.count(i) > 3:
        dic[i] = 3
    else:
        dic[i] = names.count(i)
print(max(10 - sum(dic.values()),0))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值