• 课堂练习之买书问题


    一、题目

        在节假日的时候,书店一般都会做促销活动。由于《哈利波特》系列相当畅销,店长决定通过促销活动来回馈读者。在销售的《哈利波特》平装本系列中,一共有五 卷,用编号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 }

    四、运行截图

    五、结论与体会

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

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

  • 相关阅读:
    软件工程第一次作业--IT女的进化
    软件工程第五次作业
    软件工程第四次作业
    软件工程第三次作业
    软件工程第二次作业
    v0.1beta
    第二次结对作业
    软件工程结对作业
    软件工程第三次作业
    软件工程第二次作业
  • 原文地址:https://www.cnblogs.com/yuji5656/p/4428318.html
Copyright © 2020-2023  润新知