抢红包
题目描述:
某购物网站为提高“人气”,每天会发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))