书店促销

                                   书店促销

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

      本数          折扣

      2          5%

      3          10%

      4           20%

      5           25%

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

一.设计思路

 在小于5本的情况下,直接按折扣买就好了,在大于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为输入的书本数,当(num%5!=3)成立时,则对应上面的6,7,9三种折扣,当(num%5==3&&num!=3)成立时,则对应上面的8的折扣。

二.代码实现:

//书店促销
//孔宇航 2016/5/30
#include<iostream>
using namespace std;
int main()
{
    double b,sum;
    int a,num,c;      //a为购买数量除以5的整数部分,c为余数
    cout<<"请输入要购买的书的数目:";
    cin>>num;
    if(num%5!=3)
    {
      a=num/5;
      b=30*a;
      c=num%5;
      if(c==0)
      {
         sum=b;
      }
      if(c==1)
      {
          sum=b+8;
      }
      else if(c==2)
      {
          sum=b+16*0.95;
      }
      else if(c==3)
      {
          sum=b+24*0.9;
      }
      else if(c==4)
      {
          sum=b+32*0.8;
      }
    }
    else if(num==3)
    {
        sum=24*0.9;
    }
    else if(num%5==3&&num!=3)
    {
      a=num/5;
      b=30*(a-1);
      c=num%5;
      sum=b+32*0.8*2;
    }
    cout<<"最划算的价格为:"<<sum<<endl;
    return 0;
}

三.运行结果

 

四.个人总结

   课堂上老师的领导下有了点小思路,后来在网上查阅资料时了解到了贪心算法,正好符合这个题目,就尝试了一下。如果用数量除10取余数讨论情况太多,想了又想还是除以5取余再讨论,实验顺利的完成了。

 

posted @ 2016-06-01 08:17  大脑袋酿酿  阅读(180)  评论(0编辑  收藏  举报