优惠购书
一、题目及题目要求
1. 题目:
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
本数 折扣 2 5%
3 10%
4 20%
5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
当购书数量恰好为5的倍数时,统一的七五折计算;
2. 设计思想:
如果购买的本书小于等于5本,则有多少本买多少本不一样的。如果大于5本,则需要考虑。比如6本,是3- 3优惠,还是5- 1优惠等等。没5个为一个循环,所以只需要考虑6到10就可以了。其中6 7 9都是5和余数最省钱。而8则是4- 4最省钱,所以这是一个例外,需要考虑。我计算了前十个的最优惠金额,找规律,发现8是个例外。
当购书数量为6时,优惠方案为1+5,总价为:38;
当购书数量为7时,优惠方案为2+5,总价为:45.2;
当购书数量为8时,优惠方案为4+4,总价为:51.2;
当购书数量为9时,优惠方案为4+5,总价为:55.6;
在购书的数量大于5本的范围内,例如买书16本,优惠方案为8+8本;买43本书时,优惠方案为35+8本,此时是最佳的购书方案。
三、源程序:
#include <iostream> using namespace std; double add(int number) { int m; double sum; m = number % 5 + 5; switch(m) { case 6://买6本书(5+1) sum = 38; break; case 7://买7本书(5+2) sum = 45.2; break; case 8://买8本书(4+4) sum = 51.2; break; case 9://买9本书(4+5) sum = 55.6; break; case 5://买5本书(5) sum = 30; break; } return sum; } int main(int argc, char* argv[]) { double sum = 0,d; //sum表示购买书的总价 int number,a, b, c; //number表示购买的书的数量 //a = number / 5,b = 30 * (a - 1),d为一个中间变量 int xuan; cout<<"请输入想要购买的数量:"; cin>>number; if(number <= 0) { cout<<"输入错误!"<<endl; return 0; } else if (number <= 5) { switch(number) { case 1: sum = 8; break; case 2: sum = 8*2*0.95; break; case 3: sum = 8*3*0.9; break; case 4: sum = 8*4*0.8; break; case 5: sum = 8*5*0.75; break; } } else { a = number / 5; b = 30 * (a - 1); d = add(number); sum = b + d; } cout<<"买"<<number<<"本书"<<endl; cout<<"需要支付的最低金额为:"<<sum<<endl; return 0; }
四、运行截图
五、项目计划日志
日期&&任务 |
听课 | 编写程序 | 阅读相关书籍 | 网上查找资料 | 日总计 |
周一 | 100 | 30 | 30 | 160 | |
周二 | 30 | 30 | 60 | ||
周三 | 30 | 30 | 10 | 70 | |
周四 | 100 | 20 | 30 | 150 | |
周五 | 120 | 30 | 30 | 180 | |
周六 | |||||
周日 | |||||
周总计 | 200 | 170 | 150 | 100 |
620 |
时间记录日志
5/16
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
5/30 | 14:00 | 15:50 | 10 | 100 | 听课 | 软件工程上课 |
21:04 | 21: 34 | 0 | 30 | 阅读书籍 | ||
22:10 | 22: 40 | 0 | 30 | 网上查找资料 | ||
5/31 | 18:00 | 18:30 | 0 | 30 | 阅读书籍 | |
22: 15 | 22: 45 | 0 | 30 | 网上查找资料 | ||
6/1 | 19: 25 | 20: 00 | 5 | 30 | 编写程序 | 优惠购书 |
22:00 | 22: 30 | 0 | 30 | 阅读书籍 | ||
22:40 | 22: 50 | 0 | 10 | 查找资料 | ||
6/2 | 14:00 | 15: 50 | 10 | 100 | 上课 | 软件工程上机 |
18:26 | 18: 50 | 4 | 20 | 编写程序 | 优惠购书 | |
22:00 | 22:30 | 0 | 30 | 阅读书籍 | ||
6/3 | 14: 00 | 16: 20 | 20 | 120 | 编写程序 | |
11:23 | 12: 00 | 7 | 30 | 网上查找资料 | ||
21:00 | 21:30 | 0 | 30 | 阅读书籍 |
六、个人总结
在本次求最优惠的买书价格的程序设计中,我针对题意用上了枚举的方式直接给出了买6,7,8,9本书时的最优惠的总价钱,并没有用一定的算法来实现这个求解过程,虽达到了最后的目的,但是当打折方案改变时,也就不适用了。由此可见,我们的思路还不是很开阔,只局限于那些 自己学过的简单的常用的知识,所以我还有很大的进步的空间。