《编程之美》1.4买书问题解法
2012-04-10 22:54
369 查看
问题:
在节假日的时候,书店一般都会做促销活动。由于《哈利波特》系列相当畅销,店长决定通过促销活动来回馈读者。在销售的《哈利波特》平装本系列中,一共有五卷,用编号0, 1, 2, 3, 4来表示。假设每一卷单独销售均需要8欧元。如果读者一次购买不同的两卷,就可以扣除5%的费用,三卷则更多。假设具体折扣的情况如下:
在一份订单中,根据购买的卷数以及本书,就会出现可以应用不同折扣规则的情况。但是,一本书只会应用一个折扣规则。比如,读者一共买了两本卷一,一本卷二。那么,可以享受到5%的折扣。另外一本卷一则不能享受折扣。如果有多种折扣,希望能够计算出的总额尽可能的低。
要求根据这样的需求,设计出算法,能够计算出读者所购买一批书的最低价格。
没看书上解法写出了自己的解法...然后再看书上的解法我没看懂,看起来好复杂的样子...以下是我的解法,如果有问题请重重的拍.
在节假日的时候,书店一般都会做促销活动。由于《哈利波特》系列相当畅销,店长决定通过促销活动来回馈读者。在销售的《哈利波特》平装本系列中,一共有五卷,用编号0, 1, 2, 3, 4来表示。假设每一卷单独销售均需要8欧元。如果读者一次购买不同的两卷,就可以扣除5%的费用,三卷则更多。假设具体折扣的情况如下:
本数 | 折扣 |
2 | 5% |
3 | 10% |
4 | 20% |
5 | 25% |
要求根据这样的需求,设计出算法,能够计算出读者所购买一批书的最低价格。
没看书上解法写出了自己的解法...然后再看书上的解法我没看懂,看起来好复杂的样子...以下是我的解法,如果有问题请重重的拍.
class Book: def __init__(self,_volumn, _count): self.volumn = _volumn self.count = _count #假设bookList中没有卷重复的 def amount(bookList): amount = 0 price = 8 volumnCount = len(bookList) bookCounts = [] minBookCount = 0 #由于题干说每一卷单价都是8, 所以在这个实际上我们只用关注卷总和跟本总和 for book in bookList: if book.count <= 0: volumnCount = volumnCount - 1 continue bookCounts.append(book.count) #将本总和从小到大排序 bookCounts.sort() discounts = [0,0.05,0.1,0.2,0.25] for i in range(0,len(bookCounts)): if i==0: bookCount = bookCounts[i] else: bookCount = bookCounts[i] - bookCounts[i-1] #用当前卷总和来乘当前本总和以及当前的折扣再乘以价格, 由于题意中价格是统一的所以不需要判断是第几卷 amount = amount + bookCount * volumnCount * (1-discounts[volumnCount-1])*price #卷数减1 volumnCount = volumnCount-1 return amount
相关文章推荐
- 编程之美1.4-买书问题-解法2
- 《编程之美》1.4买书问题的常数时间解法
- 编程之美1.4-买书问题-解法1
- 编程之美--游戏之乐--1.4买书问题(改进解法)
- 《编程之美》最大公约数问题之循环解法
- 《编程之美》读书笔记(四):买书折扣问题的贪心解法
- 《编程之美》读书笔记 -- 1.4买书问题
- 《编程之美》1.4 买书问题 贪心法则
- 《编程之美》1.4 买书问题 贪心策略
- 《编程之美》学而思 - 金刚坐飞机 问题2的解法
- 《编程之美》读书笔记(四): 卖书折扣问题的贪心解法
- 编程之美1.4——买书问题
- 《编程之美》2.7 最大公约数问题解法3改进
- 编程之美1.4 买书问题
- 《编程之美》读书笔记(四):卖书折扣问题的贪心解法
- 编程之美:第一章 1.4 买书问题
- 编程之美1.4 买书问题
- 编程之美 1.4买书问题常数时间空间解法
- 编程之美问题之二叉树层序遍历多种解法
- 编程之美问题之二叉树层序遍历多种解法