问题:
酒馆做活动,1块钱喝一瓶啤酒,2个空瓶可以兑换一瓶啤酒,
4个瓶盖可以兑换一瓶啤酒。如果有15块钱,最多可以喝多少瓶啤酒?
写个程序来计算,输入n元钱,输出可以喝多少瓶酒的数量(不允许借用)
解题思路:
模拟过程一步一来,代码如下
# had = {
# "瓶子": 0,
# "盖子": 0
# }
#
# def have(monry):
# # 手里有多少钱就等于你喝了多少酒且拥有相同数量的瓶子和盖子(n是你喝的酒
# had["瓶子"] = monry
# had["盖子"] = monry
# n = monry
# print("此时我花了{}钱,买了{}瓶酒,我现在有{}个瓶子,{}个盖子".format(monry, monry, monry, monry))
# while True:
# if had["瓶子"] >= 2:
# a = had["瓶子"] // 2
# print("我现在有{}个瓶子,{}个盖子。 老板我先给你{}个瓶子,你给我{}瓶酒把".format(had["瓶子"], had["盖子"], 2 * a, a))
# had["瓶子"] = had["瓶子"] - 2 * a
# had["瓶子"] = had["瓶子"] + a
# had["盖子"] = had["盖子"] + a
# n += a
# print(">>>资产: {}个瓶子,{}个盖子,一共喝了{}酒\n".format(had["瓶子"], had["盖子"], n))
# if had["盖子"] >= 4:
# b = had["盖子"] // 4
# print("我现在有{}个瓶子,{}个盖子。 老板我先给你{}个盖子,你给我{}瓶酒把".format(had["瓶子"], had["盖子"], 4 * b, b))
# had["盖子"] = had["盖子"] - 4 * b
# had["瓶子"] = had["瓶子"] + b
# had["盖子"] = had["盖子"] + b
# n += b
# print(">>>资产: {}个瓶子,{}个盖子,一共喝了{}酒\n".format(had["瓶子"], had["盖子"], n))
# if had["瓶子"] < 2 and had["盖子"] < 4:
# print(n)
# break
#
#
# have(15)
明白过程后,代码优化如下
def hadn(m):
had, n = {"瓶子": m, "盖子": m}, m
while had["瓶子"] >= 2 or had["盖子"] >= 4:
a, b = had["瓶子"] // 2, had["盖子"] // 4
had["瓶子"], had["盖子"], n = had["瓶子"] - a + b, had["盖子"] + a - 3 * b, n + a + b
else:
print(n)
你还能比我的代码更少吗?