买书问题

1、题目及要求

书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:

                              

本数 折扣
2 5%
3 10%
4 20%
5 25%

 

根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。设计算法能够计算出读者购买一批书的最低价格。
2、实验思路
通过对买书优惠找规律可得:
当买的数量为1-5本时,肯定买不同的最便宜
当买的数量为6时最优为,买一套+任意一本
当买的数量为7时最优为:买一套+任意不同的两本
当买的数量为8时最优为:不同的四本各买两本
当买的数量为9时最优为:买一套+任意不同的四本
当买的数量为10时最优为:买两套
所以任意买的书的数量都可以除以时求余数,商部分则按两套来算,余部分则按1-10之间选择最优。
3、实验代码
 
 1 #include<iostream>
 2 using namespace std;
 3 
 4 
 5 int main()
 6 {
 7     int x, a, b;//x为买书的数量
 8     double num,num1;
 9     cout << "请输入书本数:";
10     cin >> x;
11     a = x / 10;
12     b = x % 10;
13     num1 = 10 * 8 * a  * (1 - 0.25);
14     if (b == 0)
15     {
16         num = num1;
17     }
18     else if (b == 1)
19     {
20         num = num1 + 8;
21     }
22     else if (b == 2)
23     {
24         num = num1 + 2 * 8 *(1-0.05);
25     }
26     else if (b == 3)
27     {
28         num = num1 + 3 * 8*(1 - 0.1);
29     }
30     else if (b == 4)
31     {
32         num = num1 + 4 * 8*(1 - 0.2);
33     }
34     else if (b == 5)
35     {
36         num = num1 + 5 * 8*(1 - 0.25);
37     }
38     else if (b == 6)
39     {
40         num = num1 +30+ 8;
41     }
42     else if (b == 7)
43     {
44         num = num1+30 + 2 * 8*(1 - 0.05);
45     }
46     else if (b == 8)
47     {
48         num = num1 + 8 * 8 * (1-0.2);
49     }
50     else if (b == 9)
51     {
52         num = num1 + 30 + 4* 8 * (1-0.2);
53     }
54     cout << "读者购买这批书的最低价格为:" << num<<endl;
55     return 0;
56 }
View Code

4、实验截图

5、时间记录日志(单位:h):

日期 开始时间 结束时间 中断时间(min) 净时间(min) 活动 备注
星期一 14:00 15:50 10(课间) 100 听课 软件工程
星期三 15:00 17:00 10(休息) 120 看书 人月神话
星期四 14:00 15:50 10(课间) 100 上机 买书问题
星期五 18:30 19:10 10(休息) 30 编程发博客 买书问题
原文地址:https://www.cnblogs.com/zz0906/p/5557326.html