zoukankan      html  css  js  c++  java
  • 课堂练习之买书问题

    一、题目

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

          本数          折扣

          2          5%

          3          10%

          4           20%

          5           25%

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

    要求根据这样的需求,设计出算法,能够计算出读者所购买一批书的最低价格。

    二、思路分析

    在小于5本的情况下,直接按折扣买就好了:

    2          5%

    3         10%

    4         20%

    5         25%

    在大于5本的情况下,买法如下(对应折扣=本数*折扣):

        本数      可能的分解本数      对应的折扣

         6     =5+1        1.25

         7     =5+2      1.35

         8     =4+4      1.6

         9     =5+4      2.05

         10     =5+5               2.5

    在大于10本的情况下,可以分解为以上小于10本的情况来计算。

    设n为输入的书本数,当(n%5!=3)成立时,则对应上面的6,7,9三种折扣,当(n%5==3&&n!=3)成立时,则对应上面的8的折扣。

    三、程序源码

     1 #include<iostream.h>
     2 void main()
     3 {
     4     double b,sum;
     5     int a,i,c;
     6     cout<<"*********书店促销*********"<<endl;
     7     cout<<"****本数********折扣******"<<endl;
     8     cout<<"***** 2 ******** 5% ******"<<endl;
     9     cout<<"***** 3 ******** 10% ******"<<endl;
    10     cout<<"***** 4 ******** 20% ******"<<endl;
    11     cout<<"***** 5 ******** 25% ******"<<endl;
    12     cout<<"***************************"<<endl;
    13     cout<<"请输入要购买的书的数目:";
    14     cin>>i;
    15     if(i%5!=3)
    16     {
    17       a=i/5;
    18       b=30*a;
    19       c=i%5;
    20       if(c==0)
    21       {
    22          sum=b;
    23       }
    24       if(c==1)
    25       {
    26           sum=b+8;
    27       }
    28       else if(c==2)
    29       {
    30           sum=b+16*0.95;
    31       }
    32       else if(c==3)
    33       {
    34           sum=b+24*0.9;
    35       }
    36       else if(c==4)
    37       {
    38           sum=b+32*0.8;
    39       }
    40 
    41     }
    42     else if(i==3)
    43     {
    44         sum=24*0.9;
    45     }
    46     else if(i%5==3&&i!=3)
    47     {
    48       a=i/5;
    49       b=30*(a-1);
    50       c=i%5;
    51       sum=b+32*0.8*2;
    52     }
    53     cout<<"最划算的价格为:"<<sum<<endl;
    54 }

    四、运行截图

    五、结论与体会

        经过查阅资料,我知道了这个题目的算法是贪心算法,网上介绍了很多关于贪心算法,也有很多的类似题目,通过本次课堂练习,基本了解了这个题目的意思和解决办法,

    但是,还是有很多地方需要自己去学习,希望以后能够写出更好的算法解决这类问题。

  • 相关阅读:
    Codeforces Round 546 (Div. 2)
    Codeforces Round 545 (Div. 2)
    Codeforces Round 544(Div. 3)
    牛客小白月赛12
    Codeforces Round 261(Div. 2)
    Codeforces Round 260(Div. 2)
    Codeforces Round 259(Div. 2)
    Codeforces Round 258(Div. 2)
    Codeforces Round 257 (Div. 2)
    《A First Course in Probability》-chaper5-连续型随机变量-随机变量函数的分布
  • 原文地址:https://www.cnblogs.com/yuji5656/p/4428318.html
Copyright © 2011-2022 走看看