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

买书最低价问题

时间:2015-05-09 17:28:44      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

一 题目要求:

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

                                  2                       5%                                   

                                  3                       10%                                   

                                  4                       20%                                   

                                  5                       25%

       根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。请设计算法能够计算出读者购买一批书的最低价格。

二 设计思想:

      由打折规则可知,1本不打折,2-5本由对应打折规则购买可得最低价,当购买本数大于5时,可以相应转化成购买5,6,7,8,9本来算,比如10=5+5,

12=5+8,21=5*3+6等,针对5,6,7,8,9情况求得以下最优情况:

      当数目是5的整数倍时,按统一的75折最便宜。

      当数目为6时,优惠方案即6=5+3,金额为38。

      当数目为7时,最优方案7=5+2,金额为45.2。

      当数目为8时,最优方案为8=4+4,金额为51.2。

      当数目是9时,最佳方案9=5+4,金额为55.6。

      所以,综合上述,可以求得最佳购书方案。

三 代码

 

#include<iostream>
using namespace std;

double low_price(double a)
{
    double b;
    int x,y,p;
    p=(int)a;
    x=p/5;
    y=p%5;
    if(x==0&&y==3) y=-1;
    switch(y)
    {
    case -1:b=3*8*0.9;break;
    case 0: b=a*0.75*8;break;
    case 1: b=(a-1)*8*0.75+8;break;
    case 2: b=(a-2)*8*0.75+0.95*2*8; break;;
    case 3: b=(a-8)*0.75*8+8*0.8*8;break;
    case 4: b=(a-4)*8*0.75+0.8*4*8; break;
    }
    return b;
}

void main()
{
    double a,b;
    cout<<"请输入购买书的数目:";
    cin>>a;
    b=low_price(a);
    cout<<"最低优惠价为:"<<b<<endl;
}


四 截图

      技术分享

五 总结

       我在看到这道题目后,首先想到枚举,随着向后枚举时,我发现了规律,所有的情况可以分开讨论,形成了一套完整的设计思路,这道题锻炼了自己的逻辑思维能力。

买书最低价问题

标签:

原文地址:http://www.cnblogs.com/houtaoliang/p/4490650.html

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