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