python写的百元买百鸡问题扩展

今天偶尔看到人家说百元买百鸡的问题,问最简算法,所以跟着写了个程序,并且扩展到以总价n买m个总数物品的问题,价格随意。做个随笔记录一下。

def mathBuy(n = 100, m = 100, i = 5, j= 3, k = 1/3):
    """
    单位有m个人,现在年终准备了n元钱准备买活动奖品,要求中奖率100%,
    奖品种类有3种,第一种的价格是i元,第二种的价格是j元,第三种的价格是k元。
    现在问每种奖品应该买多少个才刚好花光n元钱,有几种买法?
    求最简算法。
    :param n: 金额
    :param m: 购买总数
    :param i: 物品1的价格
    :param j: 物品2的价格
    :param k: 物品3的价格
    :return:
    """
    result = []
    if (i * m <= n) or (j * m <= n) or (k * m <= n):
        x = 0
        while x <= m and x <= n / i:
            y = int(((n - k * m) - (i - k) * x) / (j - k))
            z = int((n - i * x - j * y) / k)
            sum = i * x + j * y + k * z
            if (x + y + z == m) and (y >= 0) and (z >= 0) and (sum == n):
                print(f"物品1:{x}个, 物品2:{y}个, 物品3:{z}个 ")
                num = [x, y, z]
                result.append(num)
            x += 1
    else:
        print("价格不合适,买不到足够物品!")
    return result

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值