优惠购书
一、题目及题目要求
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本书时的最优惠的总价钱,并没有用一定的算法来实现这个求解过程,虽达到了最后的目的,但是当打折方案改变时,也就不适用了。由此可见,我们的思路还不是很开阔,只局限于那些 自己学过的简单的常用的知识,所以我还有很大的进步的空间。
浙公网安备 33010602011771号