def wine(x, y, m, n):
"""
:param x: 总钱
:param y: 酒单价
:param m: 换酒的空瓶数
:param n: 换酒的瓶盖数
:return: 到的瓶数,可兑换到的瓶数,向商家赊酒的次数,总共获得的瓶数
"""
num = int(x//y) # 总钱可以买到的酒的数量
count = 0 # 兑换的酒 的数量
lend = 0 # 向商家赊酒的次数
num_1 = num # 拥有的瓶的数量
num_2 = num # 拥有的盖的数量
while True:
a = num_1 // m # 商 瓶兑换的 酒的数量
a_1 = num_1 % m # 余数 剩余的瓶 的数量
b = num_2 // n # 商 盖兑换的 酒的数量
b_1 = num_2 % n # 余数 剩余的盖 的数量
value1 = (a == 0 and b == 0)
value2 = (a_1 == m - 1 or b_1 == n - 1)
value3 = (a_1 == m - 1 and b_1 == n - 1)
if value1 and (a_1 != m - 1 and b_1 != n - 1):
print("此时不能再兑换!\n")
break
count = count + (a + b) # 累计兑换的酒 的总数
print(f"{num_1} / {m} = {a} ... {a_1}\t\t{num_2} / {n} = {b} ... {b_1}")
print(f"瓶兑换 {a} 瓶酒,剩 {a_1} 瓶\t盖兑换 {b} 瓶酒,剩 {b_1} 盖\t此轮共兑换 {a + b} 瓶酒\n")
num_1 = (a + b) + a_1
num_2 = (a + b) + b_1
if value1 and (value2 or value3):
lend += 1 # 向商家赊 1瓶 完成兑换 累计赊酒次数
print("*" * 70)
print(f"此时向商家赊 1 瓶酒,原剩 {a_1}瓶,{b_1}盖,则共有 {a_1 + 1}瓶\t{b_1 + 1}盖")
a = (num_1 + 1) // m
a_1 = (num_1 + 1) % m
b = (num_2 + 1) // n
b_1 = (num_2 + 1) % n
wine_num = a + b # 赊酒后此轮可兑换酒的数量
print(f"{num_1 + 1} / {m} = {a} ... {a_1}\t\t{num_2 + 1} / {n} = {b} ... {b_1}")
print(f"瓶兑换 {a} 瓶酒,剩 {a_1} 瓶\t盖兑换 {b} 瓶酒,剩 {b_1} 盖\t此轮共兑换 {wine_num} 瓶酒")
count = count + wine_num # 累计向商家兑换的酒数
wine_num = wine_num - 1 # 总酒数要减 1,抵消向商家赊的酒
num_1 = wine_num + a_1 # 抵消向商家赊的酒后,还剩的瓶
num_2 = wine_num + b_1 # 抵消向商家赊的酒后,还剩的盖
print(f"总酒数要减 1,抵消向商家赊的酒,故此轮可获得 {wine_num} 瓶酒,即剩 {num_1} 瓶\t{num_2} 盖")
print("*" * 70)
print(f"总钱可以买:{num} 瓶酒\n瓶和盖一共可以兑换:{count} 瓶酒,其中向商家赊了 {lend} 次酒\n总共可以获得:{num + count} 瓶")
return num, count, lend, num+count
x = eval(input("请输入总钱:"))
y = eval(input("请输入酒的单价:"))
m = int(input("请输入兑换一瓶酒所需的瓶数:"))
n = int(input("请输入兑换一瓶酒所需的盖数:"))
wine(x, y, m, n)
瓶盖换酒问题
最新推荐文章于 2023-03-14 16:22:46 发布