《最优的购书方案》

                                                                  《最优的购书方案》

问题描述:对编号不同的五本书进行购买,其中单买一本8元,买不同编号的两本书享受5%的折扣,不同编号的三本书享受10%的折扣,不同编号的四本书享受20%的折扣,不同编号的五本书享受25%的折扣,注意买同种编号的书不享受折扣优惠;根据顾客提供的买书量,为顾客设计最优的购书方案,以便以最低的价格买到想要的数量。

设计思想:通过对买10本书以内的方案设计后,得出其最优方案的规律是除了买8本是例外之外,其余的最优方案均是买全套书的整数倍再加上另单独购买买书量对整套书的本数求余后所得余数组合后即可。

源代码:

//实现以最优的方案购书
//李敏,May 10th,2015
#include<iostream>
using namespace std;

void main()
{
    int a,b;
    double c,d,e;
    cout<<"请输入需要买书的本数:"<<endl;
    cin>>a;
    if(a%5==0)
    {
        b=0;
    }
    if(a%5==1)
    {
        b=1;
    }
    if(a%5==2)
    {
        b=2;
    }
    if(a%5==3)
    {
        b=3;
    }
    if(a%5==4)
    {
        b=4;
    }
    switch(b)
    {
    case 0:d=5*8*0.75;
        if(a==5)
        {
            cout<<"最优的购书方案是五卷书各买1本"<<endl;
            cout<<""<<endl;
            cout<<"所需付的最低价为:"<<d<<"";
        }
        else
        {
            cout<<"最优的购书方案是购买"<<a/5<<"套全书"<<endl;
            cout<<""<<endl;
            cout<<"所需付的最低价为:"<<a/5*d<<"";
        }
        break;
    case 1: d=5*8*0.75;
        e=8.0;
        if(a==1)
        {
            cout<<"最优的购书方案是五卷书买其中一本即可"<<endl;
            cout<<""<<endl;
            cout<<"所需付的最低价为:"<<e<<"";
        }
        else
        {
            cout<<"最优的购书方案是购买"<<(a-1)/5<<"套全书,再单买五卷书中其中一本即可"<<endl;
            cout<<""<<endl;
            cout<<"所需付的最低价为:"<<e+(a-1)/5*d<<"";
        }
        break;
    case 2:d=5*8*0.75;
        e=16*0.95;
        if(a==2)
        {
            cout<<"最优的购书方案是五卷书中挑两本不同的书购买"<<endl;
            cout<<""<<endl;
            cout<<"所需付的最低价为:"<<e<<"";
        }
        else
        {
            cout<<"最优的购书方案是购买"<<(a-2)/5<<"套全书,再单买五卷书中其中两本即可"<<endl;
            cout<<""<<endl;
            cout<<"所需付的最低价为:"<<e+(a-2)/5*d<<"";
        }
        break;
    case 3:d=5*8*0.75;
        e=24*0.9;
        c=4*8*0.8*2;
        if(a==3)
        {
            cout<<"最优的购书方案是挑三本不同的书进行购买即可"<<endl;
            cout<<""<<endl;
            cout<<"所需付的最低价为:"<<e<<"";
        }
        else if(a==8)
        {
            cout<<"最优的购书方案是各挑四本不同的书两套进行购买即可"<<endl;
            cout<<""<<endl;
            cout<<"所需付的最低价为:"<<c<<"";

        }
        else
        {
            cout<<"最优的购书方案是购买"<<(a-8)/5<<"套全书,再各挑四本不同的书两套进行购买即可"<<endl;
            cout<<""<<endl;
            cout<<"所需付的最低价为:"<<c+(a-8)/5*d<<"";
        }
        break;
    case 4:d=5*8*0.75;
         e=32*0.8;
        if(a==4)
        {
            cout<<"最优的购书方案是挑四本不同的书进行购买即可"<<endl;
            cout<<""<<endl;
            cout<<"所需付的最低价为:"<<e<<"";
        }
        else
        {
            cout<<"最优的购书方案是购买"<<(a-4)/5<<"套全书,再单买五卷书中其中四本即可"<<endl;
            cout<<""<<endl;
            cout<<"所需付的最低价为:"<<e+(a-4)/5*d<<"";
        }
        break;
    }
}

实验结果截图:

编程总结 : 这是一个很简单的数学问题,首先得先知道要解决什么问题,即最后要得到的结果是什么;其次,应该对问题进行细化,不要嫌麻烦,要相信最终一定会找出一定的规律的。很多时候在解决问题的时候,不要太心急,应该静下心来好好的想想,要不然会把问题复杂化而最后解决不了问题。还有多上机练习,多实践,多积累,多看,多查,多问,多思多考,最后我相信自己的能力会得到提高的!                        

原文地址:https://www.cnblogs.com/Twinklelittlestar/p/4491902.html