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

Python 专栏收录该内容
4 篇文章 0 订阅

今天偶尔看到人家说百元买百鸡的问题,问最简算法,所以跟着写了个程序,并且扩展到以总价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

 

  • 2
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值