一.题目
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元,具体折扣如下所示:
本数 折扣
2 5%
3 10%
4 20%
5 25%
1 根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
2 设计算法能够计算出读者购买一批书的最低价格。
3 要求将设计思想、代码实现、实现截图、个人总结以博文的形式发表。
二.设计思想
根据折扣和买书数量可以知道:
1)当购买1,2,3,4,5本时,按卷编号顺序购买最优;
2)当购买5的整数本时,5卷一起买:5,5,5.......最佳;
3)当购买6,7,8,9时,最佳为:6=1+5,7=2+5,8=4+4,9=5+4
4)当买书量大于10本时,将数量进行求余,算出当买6、7、8、9本书时的最小价格,其余的直接用买5套的折扣价即为最优方案。
三.代码实现
1 // ConsoleApplication6.cpp : 定义控制台应用程序的入口点。 2 // 3 #include "stdafx.h" 4 int _tmain(int argc, _TCHAR* argv[]) 5 { 6 return 0; 7 } 8 #include<iostream> 9 using namespace std; 10 float price; 11 void tanxin(int book) 12 { 13 int yushu; 14 yushu = book % 5; 15 switch (yushu) 16 { 17 case 0: 18 price = book * 8 * 0.75; 19 break; 20 case 1: 21 price = (book - yushu) * 8 * 0.75 + 8; 22 break; 23 case 2: 24 price = (book - yushu) * 8 * 0.75 + 2 * 8 * 0.95; 25 break; 26 case 3: 27 price = (book - yushu) * 8 * 0.75 + 4 * 8 * 0.8 * 2 - 5 * 8 * 0.75; 28 if (book<5) 29 { 30 price += 0.4; 31 } 32 break; 33 case 4: 34 price = (book - yushu) * 8 * 0.75 + 4 * 8 * 0.8; 35 break; 36 default: 37 cout << "Error!" << endl; 38 39 } 40 } 41 void main() 42 { 43 int i= 0; 44 while (i== 0) 45 { 46 int book; 47 cout << "购买本数(tip:输入正整数):"; 48 cin >> book; 49 tanxin(book); 50 cout << "最低价格:" << price << endl; 51 cout << "还要买吗?(tip:输入0继续,输入任意键退出)"; 52 cin >> i; 53 } 54 }
四.结果截图
![](https://images0.cnblogs.com/blog2015/726983/201504/151749395893540.png)
五.总结
对于负数本书提示错误,但是对于本书太多如截图输入15亿的情况,结果显示一个带e的数。通过本次试验对自身提高很大。