zoukankan      html  css  js  c++  java
  • 课堂练习之《买书》

    题目要求:

         书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
    书的数目      折扣价
    1      100%
    2      95%
    3      90%
    4      80%
    5      75%
         根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。设计算法能够计算出读者购买一批书的最低价格。

    设计思想:

        情况一、1-5本时,按照正常的价格进行打折。
        情况二、当第6-10(除去8)本时,按照数目拆分成(5+n)来进行打折,比如6本,就可以先买五本,再买一本。
        情况三、当第8本时,变成了(4+4)最优惠。
        根据以上几种情况,第8中另外考虑。我们设数目为number,再看它有x个十本(以十本为单位),十本的数目乘以60。然后再看不足十本的数目,y=number%10,这样,将y乘以对应的十本以内的最优惠价格,加上之前的以十本为单位算出来的数目,即为最后的最优惠的总价格。

    代码实现

     1 /*
     2  * 课堂练习之《买书》
     3  * Sno:20133078
     4  * Anthor:yulei
     5  * Date:2016.6.1
     6  */
     7 #include <iostream>
     8 using namespace std;
     9 double Buy(int number)   //钱向书的本数转换
    10 {
    11     double a[6]={0,1,0.95,0.9,0.8,0.75};   //打折表,第n本打折率为a[n]
    12     double b[11];
    13     //double b[11]={0,8,15.2,21.6,25.6,30,38,45.2,51.2,55.6,60};   //前十本书的价格表
    14 
    15     for(int i=0;i<11;i++)   //用循环来实现前十本价格表的构建
    16     {
    17         int x=i/5;
    18         int y=i%5;
    19         if(i==8)
    20         {
    21             b[i]=(4*8*a[4])*2;    //当第8本时候,选取4+4的优惠政策更便宜
    22         }
    23         b[i]=x*5*8*a[5]+y*8*a[y];    //除去第8本,其他采用5+n的优惠方法来计算最便宜
    24     }
    25     int m=number/10;    //数目中有几个“十本”
    26     int n=number%10;    //不足是本,剩下的按照价格变来加入总书目
    27     double price;   //价格为两部分组成
    28     price = m*60+b[n];
    29     return price;
    30 }
    31 int main()
    32 {
    33     int number;
    34     cout<<"请输入任何数量的书:"<<endl;
    35     cout<<"	* 非整数按整数部分处理"<<endl;
    36     cin>>number;
    37     while(number<0)    //不能输入负数
    38     {
    39         cout<<"不能输入负数,请重新输入:";
    40         cin>>number;
    41     }
    42     cout<<"最少需要的钱数:"<<Buy(number)<<endl;
    43     return 0;
    44 }

    运行截图

     

    总结

          开始的时候,我将前十本的价格进行了固定,即先算出最优惠的价格,做了这样一个表,double b[11]={0,8,15.2,21.6,25.6,30,38,45.2,51.2,55.6,60}; //前十本书的价格表,当我需要时,直接拿过来用,后来为了方便打折,将计算过程也列出来了,变成了代码所示的那样,这样方便理解和修改,但是时间复杂度可能就大了。

     
  • 相关阅读:
    Redis宣言
    软件工程
    分布式编程
    编程泛型
    tcp/ip高效编程总结
    IP协议详解
    gevent程序员指南
    网站架构
    这些话,是乔布斯给世间留下的真正伟大礼物
    Flink/Spark 如何实现动态更新作业配置
  • 原文地址:https://www.cnblogs.com/cnyulei/p/5561565.html
Copyright © 2011-2022 走看看