from math import *
def numberOfChickens(legs,wings,biglegs,chests):
from math import ceil #向上取整函数
method_a=ceil(biglegs/2) #由biglegs推得方法一的最小值
method_b=ceil(chests/2) #由chests推得方法二的最小值
wings_needed=ceil((wings-4*(method_a+method_b))/4) #计算在方法一方法二同时取最小值的时候还需要多少鸡来得到wings
legs_needed=ceil(legs-2*method_a-4*method_b) #计算在方法一方法二同时取最小值的时候还需要多少鸡来得到legs
change=lambda k: 0 if k<=0 else k #构造函数lambda,当x为非正数时取0,为正数时取其本身
if wings_needed>0 and legs_needed>0: #如果还需要更多鸡获取wings和legs
return method_a+method_b+max(wings_needed,legs_needed)#为了保证个数充足,取wings与legs的最大值
else:
return method_a+method_b+change(wings_needed)+change(legs_needed)
'''
可能这里有点难理解,展开说一下:
构造change函数的目的是这样的,
我们假设wings不够,但legs够了,那么needed_legs为非正数
即我们不需要额外的鸡来提供legs,只需要额外的鸡来提供wings
此时change(wings_needed)为他本身,change(needed_legs)为0
此处的代码可以复杂化为:
if wings_needed>0 and legs_needed>0:
return method_a+method_b+max(wings_needed,legs_needed)
elif wings_needed<=0 and legs_needed>0:
return method_a+method_b+legs_needed
elif wings_needed>0 and legs_needed<=0:
return method_a+method_b+wings_needed
else:
return method_a+method_b
'''
while True:
I=input("【(legs,wings,biglegs,chests)=】")
if I=="end":
break
I1,I2,I3,I4=eval(I)
num=numberOfChickens(I1,I2,I3,I4)
print(num)