码迷,mamicode.com
首页 > 其他好文 > 详细

购书问题

时间:2015-04-15 19:20:44      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

一、题目要求

书店针对《哈利波特》系列书籍进行促销活动,一共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求余,然后转换为6-9本的情况。
三、代码
 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;
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本情况发现规律,设计出了算法。

购书问题

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!