zoukankan      html  css  js  c++  java
  • 《最优的购书方案》

                                                                      《最优的购书方案》

    问题描述:对编号不同的五本书进行购买,其中单买一本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;
        }
    }

    实验结果截图:

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

  • 相关阅读:
    WPF中调用资源字典的方法
    DataGridView控制单元格修改的输入规则
    将dataGridView数据转成DataTable
    窗体打开后设置某个控件为默认的焦点
    自定义控件属性英文类别
    VMWare虚拟机与主机建立共享文件夹
    与.Net大师Jeffrey Richter面对面交流——TUP对话大师系列活动回顾(多图配详细文字)
    一个编程小题目引发的思考(下)
    一个Quicksort究竟可以写到多么短
    我是如何设计并实现一门程序设计语言——一门函数式编程语言Lucida的诞生
  • 原文地址:https://www.cnblogs.com/Twinklelittlestar/p/4491902.html
Copyright © 2011-2022 走看看