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