促销书

题目:

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

本数 折扣

2 5%

3 10%

4 20%

5 25%

根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。 设计算法能够计算出读者购买一批书的最低价格。 要求将设计思想、代码实现、实现截图、个人总结以博文的形式发表。

算法思想:

一一列举法

本数 价钱                             原价         降价

1     8                                 8           

2     16-16*%5 =15.2         16       0.8

3     3*8-3*8*%10  =21.6   24       2.4

4     32-32*%20 =25.8       32       6.4

5     40-40*%25 =30          40       10

6本   3+3  1+5  2+4  

        43.2  38   41

7本    1+6  2+5   3+4

        46     45.2   47.4

8本    1+7  2+6  3+5    4+4

       53.2 53.2   51.6      51.6

9本  1+8   2+7    3+6    4+5 

      59.6   60.4   59.6   55.8

10 本 5+5 

代码实现:

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     double monery;
 6     int num;
 7     int shang, yu;
 8     cout << "请输入购买数量:";
 9     cin >> num;
10     if (num <= 5)
11     {
12         switch (num)
13         {
14         case(1) : monery = 8; break;
15         case(2) : monery = 16 * 0.95; break;
16         case(3) : monery = 24 * 0.9; break;
17         case(4) : monery = 32 * 0.8; break;
18         case(5) : monery = 30; break;
19         default:cout << "输入错误!!" << endl;
20         }
21     }
22     else if (num <= 10)
23     {
24         switch (num)
25         {
26         case(6) : monery = 38; break;
27         case(7) : monery = 45.2; break;
28         case(8) : monery = 51.2; break;
29         case(9) : monery = 55.6; break;
30         case(10) : monery = 60; break;
31         }
32     }
33     else
34     {
35         shang = num / 10;
36         yu = num % 10;
37         switch (yu)
38         {
39         case(1) : monery = 8; break;
40         case(2) : monery = 16 * 0.95; break;
41         case(3) : monery = 24 * 0.9; break;
42         case(4) : monery = 32 * 0.8; break;
43         case(5) : monery = 30; break;
44         case(6) : monery = 38; break;
45         case(7) : monery = 45.2; break;
46         case(8) : monery = 51.2; break;
47         case(9) : monery = 55.6; break;
48         }
49         monery += 60 * shang;
50     }
51     cout << "购买数量为:" << num << "  应付金额:" << monery << endl;
52 return 0;
53 }

总结:

此类问题类似数学里的找规律推导公式,将实际问题转化为代码的能力很重要。

原文地址:https://www.cnblogs.com/brucekun/p/5562070.html