• 课堂练习——如何使读者以最大折扣购买一批书


    题目要求:

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

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

    一 设计思想

        1.购买少于5本按该本数对应的折扣购买;

        2.购买6、7、8、9本书时,分为两组(1、5,4、4.....)来获得最大折扣;

        3.购买多于十本时,可以转化为购买6、7、8、9本书时的情况;

    二 程序代码

    #include "stdafx.h"
    #include<iostream.h>
    double num1(int a){   //买书的本数为6、7、8、9
       double sum1;
       switch(a%5)
           {
           case 1:
               sum1=5*8*0.75+8;break;
           case 2:
               sum1=5*8*0.75+2*8*0.95;break;
           case 3:
               sum1=4*8*0.8+4*8*0.8;break;
           case 4:
               sum1=5*8*0.75+4*8*0.8;break;   
           }
    return sum1;   //返回最大折扣
    }
    
    int main(int argc, char* argv[])
    {
        int num;
        double sum;   //最大折扣
        cout<<"请输入您要购买的本数:";
        cin>>num;
        if(num<=5)
        {
           switch(num)
           {
           case 1:
               sum=8;break;
           case 2:
               sum=2*8*0.95;break;
           case 3:
               sum=3*8*0.9;break;
           case 4:
               sum=4*8*0.8;break;
           case 5:
               sum=5*8*0.75;break;
           }
        }
        if((num>5)&&(num<10))
        {
            sum=num1(num);      //大于5小于10时,调用num1函数
        }
        if(num>9)             //大于等于10之后的,可以转化为6、7、8、9的情况计算
        {
            switch(num%5)
           {
            case 0:
                sum=(num/5)*8*5*0.75;break;
           case 1:
               sum=(num/5-1)*5*8*0.75+num1(6);break;
           case 2:
               sum=(num/5-1)*8*5*0.75+num1(7);break;
           case 3:
               sum=(num/5-1)*8*5*0.75+num1(8);break;
           case 4:
               sum=(num/5-1)*8*5*0.75+num1(9);break;
           }
        }
    
       cout<<"最大折扣价为:"<<sum;
       cout<<endl;
       return 0;
    
    }

    三 结果截屏

    四 心得体会

        第一次看到这个题目时,思路很模糊,不知道该如何下手,不知道该怎么分配才能得到最大折扣价值,后来通过老师和同学们的讨论,自己也拿起笔来算,就可以发现买多于5本书都可以转化为6、7、8、9这四种情况,便可以解决若干本书的购买折扣问题。

       面对一个看似难以解决无从下手的题目时,要寻找规律,寻求一种好的解决思路之后再下手。

  • 相关阅读:
    pom变成红橙色
    拉链表
    Newsgroups数据集研究
    python 安装第三方包
    概率图(三)CRF条件随机场
    概率图(二)马尔科夫随机场MRF
    LDA主题模型
    TF-IDF算法
    mysql 自定义排序顺序
    [转]解决a different object with the same identifier value was already associated with the session错误
  • 原文地址:https://www.cnblogs.com/luyu2783/p/4425907.html
Copyright © 2020-2023  润新知