一、程序要求
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
二、程序设计思想
买一本书时,只有一种情况,8元;
买两本书时,有2种情况:
1. 买2本一样的书,2*8=16元
2. 买2本不一样的书,2*8-2*8*5%=15.2
买三本书时,有3种情况:
1. 买3本一样的书,3*8=24元
2. 买2本卷1,1本卷2,3*8-8*2*5%=23.2
3. 买3本不一样的,8*3-3*8*10%=21.6
买四本书时,有4种情况:
1. 买4本一样的书,4*8=32元
2. 买3本卷1,1本卷2,8*4-2*8*5%=31.2
3. 买2本卷1,2本卷2,8*4-8*2*2*5%=30.4
4. 买3本不一样的书,8*4-8*3*10%=29.6
5. 买4本不一样的书,8*4-8*4*20%=25.6
买5本书时,有7种情况:
1. 买5本一样的书,5*8=40元
2. 买4本卷1,1本卷2,8*5-2*8*5%=39.2
3. 买3本卷1,2本卷2,8*5-8*2*2*5%=38.4
4. 买3本卷1,1本卷2,1本卷3,8*5-8*3*10%=37.6
5. 买2本卷1,2本卷2,1本卷3,8*5-8*3*10%-8*2*5%=36.8
6. 买4本不一样的书,8*5-8*4*20%=33.6
7. 买5本不一样的书,8*5-8*5*25%=30
买6本书时,有10种情况:
1. 买6本一样的书,6*8=48元
2. 买5本卷1,1本卷2,6*8-2*8*5%=47.2
3. 买4本卷1,2本卷2,6*8-2*8*2*5%=46.4
4. 买3本卷1,3本卷2,6*8-3*8*2*5%=45.6
5. 买4本卷1,1本卷2,1本卷3,6*8-3*8*10%=45.6
6. 买3本卷1,2本卷2,1本卷3,6*8-3*8*10%-8*2*5%=44.8
7. 买2本卷1,2本卷2,2本卷3,6*8-2*8*3*10%=43.2
8. 买3本卷1,1本卷2,1本卷3,1本卷4,6*8-8*4*20%=41.6
9. 买2本卷1,2本卷2,1本卷3,1本卷4,6*8-8*4*20%-8*2*5%=40.8
10. 买5本不一样的书,6*8-8*5*25%=38
买7本书时,有13种情况:
1. 买7本一样的书,7*8=56元
2. 买5本卷1,1本卷2,7*8-2*8*5%=55.2
3. 买4本卷1,2本卷2,7*8-2*8*2*5%=54.4
4. 买3本卷1,3本卷2,7*8-3*8*2*5%=53.6
5. 买5本卷1,1本卷2,1本卷3,7*8-3*8*10%=53.6
6. 买4本卷1,2本卷2,1本卷3,7*8-3*8*10%-8*2*5%=52.8
7. 买3本卷1,3本卷2,1本卷3,7*8-3*8*10%-2*8*2*5%=52
8. 买2本卷1,2本卷2,2本卷3,7*8-2*8*3*10%=51.2
9. 买4本卷1,1本卷2,1本卷3,1本卷4,7*8-8*4*20%=49.6
10. 买3本卷1,2本卷2,1本卷3,1本卷4,7*8-8*4*20%-8*2*5%=48.8
11. 买2本卷1,2本卷2,2本卷3,1本卷4,7*8-8*4*20%-8*3*10%=47.2
13. 买2本卷1,2本卷2,1本卷3,1本卷4,1本卷5,7*8-8*5*25%-8*2*5%=45.2
由此可见,购买的每套图书里的本数最多,折扣越大,价格越低。
三、源程序代码
1 //购买图书最低价格 2 //张莹荧 2016-06-03 3 4 #include <iostream> 5 using namespace std; 6 void main() 7 { 8 int n; //书的本数 9 int a = 0, b = 0; //a为当本数大于5的时候,表示有几个5,则计算几倍的5本价钱。b表示剩余的不足5本的价格。 10 double price; //sum表示总价格 11 cout << "请输入要买的书的本数:" << endl; 12 cin >> n; 13 14 a = n / 5; 15 b = n % 5; 16 17 if (n == 3) 18 price = 3 * 8 * (1 - 0.1); 19 else 20 { 21 if (b == 0) 22 price = a * 5 * 8 * (1 - 0.25); 23 if (b == 1) 24 price = a * 5 * 8 * (1 - 0.25) + 8; 25 if (b == 2) 26 price = a * 5 * 8 * (1 - 0.25) + 2 * 8 * (1 - 0.05); 27 if (b == 3) 28 price = (n - 8) / 5 * 5 * 8 * (1 - 0.25) + 4 * 2 * 8 * (1 - 0.2); 29 if (b == 4) 30 price = a * 5 * 8 * (1 - 0.25) + 4 * 8 * (1 - 0.2); 31 } 32 cout << "购买书的最低价格为:" << price << "元。" << endl; 33 }
四、运行结果截图
五、项目计划日志:
周活动总结表
姓名:张莹荧 日期:2016-06-03
日期/任务 | 听课 | 编写程序 | 阅读课本 | 准备考试 | 日总计 | ||
周一5.30 | 100 | 30 | 120 | 250 | |||
周二 | 30 | 30 | 120 | 180 | |||
周三 | 180 | 180 | 360 | ||||
周四 | 100 | 30 | 120 | 250 | |||
周五 | 30 | 30 | |||||
周总结 | 200 | 270 | 60 | 540 | 1070 |
阶段时间和效率 周数:14
不包括上一周在内的累计时间
总计 | 200 | 270 | 60 | 540 | 1070 | ||
平均 | 200 | 270 | 60 | 540 | 1070 | ||
最大 | 200 | 270 | 60 | 540 | 1070 | ||
最小 | 200 | 270 | 60 | 540 | 1070 |
以前各周的累计时间
总计 | 200 | 270 | 60 | 540 | 1070 | ||
平均 | 200 | 270 | 60 | 540 | 1070 | ||
最大 | 200 | 270 | 60 | 540 | 1070 | ||
最小 | 200 | 270 | 60 | 540 | 1070 |
六、时间记录日志:
学生:张莹荧 日期:2016-06-03
教师:王建民 课程: PSP
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
5.30 |
14:00 |
15:50 |
10 |
100 |
上课 |
课间休息 |
5.31 |
10:00 |
10:30 |
0 |
30 |
编程 | |
6.1 |
14:30 |
17:40 |
10 |
180 |
编程 |
中间休息 |
6.2 |
12:30 14:00 |
13:00 15:50 |
0 10 |
30 100 |
编程 上课 |
课间休息 |
6.3 |
11:00 |
11:30 |
0 |
30 |
编程 |
七、缺陷记录日志:
学生: 张莹荧
日期: 2016-06-03
教员: 王建民
程序号: 14
日期 | 编号 | 类型 | 引入阶段 | 排除阶段 | 修复时间 | 修复缺陷 |
6.03 | 1 | 算法 | 编码 | 查资料、问同学 | 30min | |
描述:程序设计问题,不知道该如何入手。 |
八、实验总结
题本身很简单,只要从第一本开始列出来,找出其中的规律,程序思路很容易就出来了。