课堂练习之书费问题

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

                               本数                  折扣

                                   2                       5%

                                   3                       10%

                                   4                       20%

                                   5                       25%

根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
思路:
     根据题目可以清楚点的知道在1-5本之间时,购买1、2、3、4、5本不同书籍最省钱,6本时是5+1,7本时是5+2,8本时是4+4,9本时是5+4,以上是最省钱的购买方式。
即假设购买的书籍是n本,则花费最少的金额为w,当n%5=0时,w=n*8*0.75;当n%5=1时,w=(n-1)*8*0.75+8;当n%5=2时,w=(n-2)*8*0.75+8*2*0.95;
当n%5=3时,w=(n-8)*8*0.75+8*8*0.8;当n%5=4时,w=(n-4)*8*0.75+4*8*0.8。以上就可以的得出最少花费的购买书籍的方式。
源代码:
 1 #include <iostream>
 2 using namespace std;
 3 
 4 void main()
 5 {
 6     int n;//n为要购买书籍的数量
 7     double w;//w为购买书籍所花费最少的金额
 8     for(;;)
 9     {
10         cout<<"请输入要购买书籍的数量:"<<endl;
11         cin>>n;
12         //按照购买不同数量书籍的情况来设计不同的表达式
13         if(n%5==0)
14         {
15             w=n*8*0.75;
16         }
17         else if(n%5+5==6)
18         {
19             w=(n-1)*8*0.75+8;
20         }
21         else if(n%5+5==7)
22         {
23             w=(n-2)*8*0.75+2*8*0.95;
24         }
25         else if(n%5+5==8)
26         {
27             w=(n-8)*8*0.75+8*8*0.8;
28         }
29         else if(n%5+5==9)
30         {
31             w=(n-4)*8*0.75+4*8*0.8;
32         }
33         cout<<"买这批书花费最少为:"<<w<<""<<endl;
34     }
35 }

结果截图:

个人总结:

      看到以上这类问题时,要用笔在纸上划一划,找找规律基本就能解决问题。

原文地址:https://www.cnblogs.com/liguoshuai/p/5543021.html