购买《哈利波特》书方案

一、题目

     在节假日的时候,书店一般都会做促销活动。由于《哈利波特》系列相当畅销,店长决定通过促销活动来回馈读者。在销售《哈利波特》平装本系列中,一共有五卷,用编号0,1,2,3,4来表示。假设每一卷单独销售均需要8欧元,如果读者一次购买不同的两卷,就可以扣除5%的费用,三卷则更多。假设具体折扣的情况如下:

    本数        折扣

    2            5%

    3            10%

    4            20%

    5            25%

    在一份订单中,根据购买的卷数以及本数,就会出现可以应用不同折扣规则的情况。但是,一本书只会应用一个折扣。比如,读者一共买了两本卷一,一本卷二。那么,可以享受5%的折扣。另外一本卷一则不能享受折扣。如果有多种折扣,希望能够计算出的总额尽可能的低。要求根据这样的需求,设计出算法,能够计算出读者所购买一批书的最低价格

二、思路

        当购买的书的数目为Book_num时,Five_num=Book_num/5表示所买的全套5本书的数量,Left_num=Book_num%5表示买完全套5本书后剩余的需要购买的本数,购买时只需按(Five_num*5+Left_num)(0<Left_num<5),购买Five_num个全套5本另外再买Left_num本(0<Left_num<5)时价格最低,特别注意8、13、18等除以5余数为3时需要购买完可以购买的全套5本后再购买2套4本的。

三、代码

#include<iostream>
using namespace std;

int main()
{
    int Book_num,Five_num,Left_num;
    cout<<"请输入需要购买的<<哈利波特>>书的本数:"<<endl;
    cin>>Book_num;
    if(Book_num<=0)
    {
        cout<<"输入数据有误,应输入整数!----请重新输入:"<<endl;
        cin>>Book_num;
    }

    Five_num=Book_num/5;    //需要买的全套5本书的数目
    Left_num=Book_num%5;    //除去买的全套书剩余的书

    if(Book_num<5)    //所买的本数小于5时
    {
        switch(Book_num)
        {
        case 1:
            cout<<"买1本书时最低价格为8元"<<endl;
            break;
        case 2:
            cout<<"买2本不同的书时有最低价格为:"<<Book_num*8*0.95<<""<<endl;
            break;
        case 3:
            cout<<"买3本不同的书时有最低价格为:"<<Book_num*8*0.9<<""<<endl;
            break;
        case 4:
            cout<<"买4本不同的书时有最低价格为:"<<Book_num*8*0.8<<""<<endl;
        }
    }
    else{
        switch(Left_num)    //所买的本书大于等于5时,判断除五的余数给出方案
        {
        case 0:
            cout<<""<<Five_num<<"套5本的"<<endl;
            cout<<"最低价格为:"<<Five_num*8*5*0.75<<endl;
            break;
        case 1:
            cout<<""<<Five_num<<"套5本的"<<""<<"再买"<<Left_num<<""<<endl;
            cout<<"最低价格为:"<<Five_num*8*5*0.75+Left_num*8<<endl;
            break;
        case 2:
            cout<<""<<Five_num<<"套5本的"<<""<<"再买不同的"<<Left_num<<""<<endl;
            cout<<"最低价格为:"<<Five_num*8*5*0.75+Left_num*8*0.95<<endl;
            break;
        case 3:
            cout<<""<<Five_num-1<<"套5本的"<<""<<"再买2套4本"<<endl;    //余数为3时要注意给出4本的方案
            cout<<"最低价格为:"<<(Five_num-1)*8*5*0.75+2*4*8*0.8<<endl;
            break;
        case 4:
            cout<<""<<Five_num<<"套5本的"<<""<<"再买不同的"<<Left_num<<""<<endl;
            cout<<"最低价格为:"<<Five_num*8*5*0.75+Left_num*8*0.8<<endl;
        }
    }

    return 0;
}

四、运行结果截图

五、个人总结

     这次的题目最重要的是要自己在本子上先计算以下,找出其中的规律,找到10本时才发现的规律,找到规律后变可以写代码了。最大的收获就是看到老师所给的题目首先静下来将题目分解并思考出相应解决方案,直接上去写代码反而写不出来。

原文地址:https://www.cnblogs.com/wuyw/p/5556854.html