购书问题

一、题目要求

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

                               本数                  折扣

                                2                       5%

                                3                       10%

                                4                       20%

                                5                       25%

根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
二、设计思想
题目的关键是解决当购买6、7、8、9本时应如何购买。经计算,6本时:1本+5本最优;7本时:2本+5本最优;8本时:4本+4本最优;9本时:4本+5本最优。1-5本时不用特殊考虑,其他本数时将其转换为6-9本的情况处理。即将本数对10求余,余数大于5则将求余结果带入6-9本情况中,同时计算减去余数后包含几个5;余数小于五则直接计算减去余数后包含几个5,再加上余数的买书计算结果。
三、代码
 1 #include<iostream.h>
 2 
 3 void show(int x , double &sum)
 4 {
 5     if(x==6)
 6     {
 7         cout<<"5本一组,1本一组来购买";
 8         sum=sum+5*8*0.75+8;
 9     }
10     if(x==7)
11     {
12         cout<<"5本一组,2本一组来购买";
13         sum=sum+5*8*0.75+2*8*0.95;
14     }
15     if(x==8)
16     {
17         cout<<"4本一组,4本一组来购买";
18         sum=sum+8*8*0.8;
19     }
20     if(x==9)
21     {
22         cout<<"5本一组,4本一组来购买";
23         sum=sum+5*8*0.75+4*8*0.8;
24     }
25 }
26 
27 void main()
28 {
29     cout<<"请输入要购买的本数:"<<endl;
30     int num,a,b,i;
31     double sum=0;
32     cin>>num;
33     cout<<"最优惠的方案是:"<<endl;
34     a=num%10;
35     if(a>5)
36     {
37         b=num/5-1;
38         for(i=1;i<=b;i++)
39         {
40             cout<<"5组一本,";
41         }
42         sum=sum+b*8*5*0.75;
43         show(a,sum);
44     }
45     else if(a<5&&a>0)
46     {
47         a=a+5;
48         b=num/5-1;
49         for(i=1;i<=b;i++)
50         {
51             cout<<"5组一本,";
52         }
53         sum=sum+b*8*5*0.75;
54         show(a,sum);
55     }
56     else
57     {
58         b=num/5;
59         for(i=1;i<=b;i++)
60         {
61             cout<<"5组一本,";
62         }
63         sum=sum+b*8*5*0.75;
64     }
65     cout<<endl<<"一共花费"<<sum<<""<<endl;
66 }

四、运行结果截图

 

五、总结

这次题目是对设计好的算法的练习,一开始感觉用程序实现可以考虑遍历,枚举所有情况再找最小值,不会漏掉情况。但发现这样比较繁琐,而且在算法实现上最为耗时,不是最简洁的。然后通过计算购买6-9本的情况发现规律,和结对的同学讨论出了算法并实现。

原文地址:https://www.cnblogs.com/dr73/p/4429317.html