发布: 江湖程序员 来源: 本站原创 时间: 2015/02/09 11:20
(972) 点赞: (39) 标签: python编程习题
问题描述:
点击图片查看原图:
"""
#推衍步骤:
20元买20瓶 计20瓶 --> 20空瓶,20瓶盖
20空瓶=10瓶 20瓶盖=5瓶 计15瓶 --> 15空瓶,15瓶盖
15空瓶=7瓶 15瓶盖=3瓶 计10瓶 --> 10空瓶,10瓶盖 + 余1空瓶,3瓶盖
11空瓶=5瓶 13瓶盖=3瓶 计8瓶 --> 8空瓶,8瓶盖 + 余1空瓶,1瓶盖
9空瓶=4瓶 9瓶盖=2瓶 计6瓶 --> 6空瓶,6瓶盖 + 余1空瓶,1瓶盖
7空瓶=3瓶 7瓶盖=1瓶 计4瓶 --> 4空瓶,4瓶盖 + 余1空瓶,3瓶盖
5空瓶=2瓶 7瓶盖=1瓶 计3瓶 --> 3空瓶,3瓶盖 + 余1空瓶,3瓶盖
4空瓶=2瓶 6瓶盖=1瓶 计3瓶 --> 3空瓶,3瓶盖 + 余0空瓶,2瓶盖
3空瓶=1瓶 5瓶盖=1瓶 计2瓶 --> 2空瓶,2瓶盖 + 余1空瓶,1瓶盖
3空瓶=1瓶 3瓶盖=0瓶 计1瓶 --> 1空瓶,1瓶盖 + 余1空瓶,3瓶盖
2空瓶=1瓶 4瓶盖=1瓶 计2瓶 --> 2空瓶,2瓶盖 + 余0空瓶,0瓶盖
2空瓶=1瓶 2瓶盖=0瓶 计1瓶 --> 1空瓶,1瓶盖 + 余0空瓶,2瓶盖
最后得75瓶余下1空瓶和3个瓶盖"""
#python编程代码实现:
def f(s,x,y):#依次是:(瓶,空瓶,盖子)
print(s)
x,x1 = divmod(x,2)#空瓶数与可兑换的数量(2)作求余运算,并返回商
y,y1 = divmod(y,4)#瓶盖数与可兑换的数量(4)作求余运算,并返回商
if x == 0 and y == 0 and x1 < 2 and y1 < 4:#判断递归终止的条件,即不足以继续兑换
return s,x1,y1#输出答案(瓶,空瓶,盖子)
else:
return f(s+x+y,x1+x+y,y1+x+y)#将返回结果作为参数再回调函数
#依次返回的结果s+x+y 本身可以买到的瓶数(s)+空瓶兑换的瓶数(x)+瓶盖兑换的瓶数(y)
# x1+x+y 记录当次兑换后所拥有的空瓶数量
# y1+x+y 记录当次兑换后所拥有的瓶盖数量
s = 20
print(f(s,s,s,))
---= 已经到底 =---