一、题目

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

             本数         折扣

             2     5%

             3     10%

             4     20%

             5     25%

  根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。   

  设计算法能够计算出读者购买一批书的最低价格。

二、设计思想

  这次实验,在课堂上我们进行了计算寻找规律,在老师的指导下我们找到了如下规律

  对于大多数情况,选择尽可能选择五卷书为一个整体来购买最多余下的就随机购买五卷中不相同的卷就可以价格最低。但是在数量除以10余数为8的情况有所不同,这时候选择4+4组合更为优惠

  对于上述规律我采取了分情况计算的算法:

  特殊情况:

    用数量除以10的余数来计算特殊情况下买书的前+以五卷书为一个整体买书需要花的钱。

  大多数情况:  

    以五卷书为一个整体买书需要花的钱+不构成五卷为一个整体买书所花的钱

三、代码实现

#include<iostream>
using namespace std;

int main()
{
    int BookNum=0;
    double Needmoney;
    double a[5]={0,0.05,0.1,0.2,0.25};

    while(BookNum<1)
    {
        cout<<"请输入你想要买的书的数量:";
        cin>>BookNum;
    }
    if(BookNum%10==8)
    {
        Needmoney=(BookNum/10)*10*8*(1-a[4])+(BookNum%10)*8*(1-a[3]);
    }
    else
    {
        Needmoney=(BookNum/5)*5*8*(1-a[4])+(BookNum%5)*8*(1-a[BookNum%5-1]);
    }

    cout<<"读者购买这批书的最低价格为:"<<Needmoney<<endl;
    cout<<"买法如下:"<<endl;
    if(BookNum%10==8)
    {
        cout<<"五卷中有四卷书每卷买"<< (BookNum/10)*2+2<<"本,";
        cout<<"剩下的一卷买"<< (BookNum/10)*2<<"本,"<<endl;
    }
    else
    { 
        if(BookNum%5!=0)
        {
            cout<<"五卷中有"<<BookNum%5<<"卷书每卷买"<< BookNum/5+1<<"本,";
            cout<<"剩下的"<<5-BookNum%5<<"卷每卷买"<< BookNum/5<<"本,"<<endl;
        }
        else
        {
            cout<<"五卷书每卷买"<< BookNum/5<<""<<endl;
        }
        
    }
    return 0;
}

四、实现截图

实例一:大多数情况下:

实例二:特殊情况

五、个人总结

       这次实验,主要是在锻炼设计思维的,能锻炼我们设计算法的思维,并帮助我们找到解题技巧。在一开始我没理解题目内容,找规律时有点摸不着头脑。在同学的帮助下我理解了题目内容,进行了自己找规律,进行到一半儿时,老师就给我们讲解了规律,在实验课上通过自己编程进行了实现,完成了这次实验。

       通过这次实验,我觉得理解题目内容很重要,不理解题目内容就会一头雾水,不知道该怎么计算。这次实验,相对于前面的实验来说,找到规律就很简单,只要自己找对方法就能很快完成。这次实验,可以说给我一个很深的体会,每次编程前都要理解编程目的,找到最优办法,而不是盲目的去开始,要有计划。