题目
四达时代在非洲部分国家开展广播电视运营服务,针对非洲人民的消费习惯,对同一个节目包都会提供不同规格的购买套餐。
假定全部节目包的不同规格套餐的每日资费相同,均为每日1元。当某个用户来四达营业厅购买节目包套餐时,每购买一个套餐需要打印一张发票,因此当用户购买多个套餐时,为了节约打印发票时间,需要计算最少的套餐个数。
例如一个节目包,有1日,2日和5日三种规格,则该节目的套餐价格列表为 1,2,5。用户缴纳了11元现金,最少需要购买2个5日包和1个1日包,一共需要打印3张发票。
例如一个节目包,只有1日规格,则该节目的套餐价格列表为 1。用户缴纳了10元现金,最少需要购买10个1日包,一共需要打印10张发票。
例如有一个节目包,有1日,9日和10日三种规格,则该节目包的套餐价格列表为1,9,10。用户缴纳了18元现金,最少需要购买2个9日包,一共需要打印2张发票。
输入顺序为:package amount,package为不同规格的套餐资费,默认输入至少提供1日资费1元,package使用英文逗号分隔。amount为用户准备购买节目套餐的现金。
输出:打印发票的张数
例如:
input1:1,2,5 11 output1: 3
input2:1,9,10 18 output2: 2
input3:1,2,5,10 26 output3:4
Python:
def get_min_packages(package, amount):
# 将不同规格的套餐资费转换为整数列表
package_list = [int(x) for x in package.split(",")]
# 从大到小排序
package_list.sort(reverse=True)
# 计算最少需要购买的套餐数量
count = 0
for p in package_list:
if amount >= p:
count += amount // p
amount %= p
return count
# 测试
print(get_min_packages("1,2,5", 11)) # 输出 3
print(get_min_packages("1,9,10", 18)) # 输出 2
print(get_min_packages("1,2,5,10", 26)) # 输出 4
将输入的不同规格的套餐资费转换为整数列表后,按照从大到小的顺序排序,然后依次计算最少需要购买的套餐数量。
使用整除运算符//可以得到除法的整数部分,使用取模运算符%可以得到除法的余数部分。最后返回最少需要购买的套餐数量即可。