瓶盖换酒问题

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值