《哈利波特》买书最优惠算法

一、题目要求

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

                               本数                  折扣

                                   2                       5%

                                   3                       10%

                                   4                       20%

                                   5                       25%

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

  要求将设计思想、代码实现、实现截图、个人总结以博文的形式发表。(截止日期2015-4-15晚18:00)

二、设计思想

  首先注意到小于5本书的时候,套用现有的优惠条件就是最优惠的方案;

  如果书的数目大于10本,此时可以简化成买几个5本和一次6到10本这样的方案来达到最优惠的目的;  

  对6~10本进行简单的计算算出:

  6本:分解成5+1本;总价为:30+8元

    或分解成4+2本;总价为:25.6+15.2元

    或分解成3+3本;总价为:21.6+21.6元

    可以看出5+1本最划算;

  7本:分解成5+2本;总价为:30+15.2元

      或分解成4+3本;总价为:21.6+25.6元

    可以看出5+2本最划算;

  8本:分解成5+3本;总价为:30+21.6元

    或分解成4+4本;总价为:25.6+25.6元

    可以看出4+4本最划算

  9本:分解成5+4本;总价为:30+25.6元

    此时为最划算(只有这一种情况)

  10本:买两个5本就行;

三、源代码

#include <iostream.h>

#include <conio.h>

int main(void)

{

    int n;

    cout<<"请输入要买几本书?"<<endl;

    cin>>n;

    if(n<6)

    {

        cout<<"请重新输入大于5的书目:";

        cin>>n;

    }

    int a=n%5;

    int b=n/5;

    switch(a)

    {

        case 1:

            cout<<"您先买"<<b*5<<"本书,"<<"再买1本书最划算"<<endl;

            cout<<"总价为:"<<b*30+8<<"";

            break;

        case 2:

            cout<<"您先买"<<b*5<<"本书,"<<"再买2本书最划算"<<endl;

            cout<<"总价为:"<<b*30+15.2<<"";

            break;

        case 3:

            cout<<"您先买"<<(b-1)*5<<"本书,"<<"再买两次4本书最划算"<<endl;

            cout<<"总价为:"<<(b-1)*30+51.2<<"";

            break;

        case 4:

            cout<<"您先买"<<b*5<<"本书,"<<"再买4本书最划算"<<endl;

            cout<<"总价为:"<<b*30+25.6<<"";

            break;

        case 0:

            cout<<"您直接买"<<b*5<<"本书最划算"<<endl;

            cout<<"总价为:"<<b*30<<"";

            break;

         

    }

 

    //继续吗?

    int con;

    cout<<endl<<"继续吗?是输入1,否输入0:";

    cin>>con;

    if(con==1)

    {

        main();

    }

    else

    {

        return 0;

    }

    getch();

    return;

}

四、结果截图

五、总结

队友:程鹏远

队友特点是编程能力比我好,但是有时候有些问题会卡到一个地方很久才能出来。

经过这么多次的结队开发我们也从这里学到了很多的东西,例如之前我们看到题目就会去敲代码,边敲边想,所以很多时候我们会在这个过程中遇到很多问题,浪费了很多的时间。然而现在我们会先对问题进行分析然后去设计算法,最后才去代码实现,这样我们明显感觉节省了很多时间!

posted on 2015-04-15 12:07  简简单单爱  阅读(609)  评论(0编辑  收藏  举报