一、程序要求

  书店针对《哈利波特》系列书籍进行促销活动,一共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  
描述:程序设计问题,不知道该如何入手。

 

 
 
 
 
 

八、实验总结

  题本身很简单,只要从第一本开始列出来,找出其中的规律,程序思路很容易就出来了。