《编程之美》1.4买书问题解法

问题:

    在节假日的时候,书店一般都会做促销活动。由于《哈利波特》系列相当畅销,店长决定通过促销活动来回馈读者。在销售的《哈利波特》平装本系列中,一共有五卷,用编号0, 1, 2, 3, 4来表示。假设每一卷单独销售均需要8欧元。如果读者一次购买不同的两卷,就可以扣除5%的费用,三卷则更多。假设具体折扣的情况如下:

本数折扣
25%
310%
420%
525%

 
在一份订单中,根据购买的卷数以及本书,就会出现可以应用不同折扣规则的情况。但是,一本书只会应用一个折扣规则。比如,读者一共买了两本卷一,一本卷二。那么,可以享受到5%的折扣。另外一本卷一则不能享受折扣。如果有多种折扣,希望能够计算出的总额尽可能的低。

要求根据这样的需求,设计出算法,能够计算出读者所购买一批书的最低价格。

没看书上解法写出了自己的解法…然后再看书上的解法我没看懂,看起来好复杂的样子…以下是我的解法,如果有问题请重重的拍.

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

    原文作者:RothCold
    原文地址: https://blog.csdn.net/ark1030/article/details/7447569
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞