一、问题描述
n书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
本数 折扣
2 5%
3 10%
4 20%
5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则。例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。设计算法能够计算出读者购买一批书的最低价格。
二、 解决思想
在输入购书数目的情况下考虑最优价格时,只需考虑本数位于1~9的情况,当大于这些的时候都可以将大于的部分分为5本一组进行25%的最大折扣。
三、代码
1 /*====================================================================== 2 # Author: ZhangYaPeng 3 # E-Mail: [email protected] 4 # Last modified: 2015-04-16 12:47 5 # Filename: Demo.cpp 6 # Description: 7 ======================================================================*/ 8 9 # include <iostream> 10 using namespace std; 11 #define INIT 8 12 13 void Price(int p,int q,int sum) 14 { 15 switch(q) 16 { 17 case 0: 18 sum = 2*p*INIT*0.75*5; 19 cout<<"最低的价格为:"<<sum<<endl; 20 break; 21 case 1: 22 sum = 2*p*INIT*0.75*5+INIT; 23 cout<<"最低的价格为:"<<sum<<endl; 24 break; 25 case 2: 26 sum = 2*p*INIT*0.75*5+p*INIT*0.95; 27 cout<<"最低的价格为:"<<sum<<endl; 28 break; 29 case 3: 30 sum = 2*p*INIT*0.75*5+p*INIT*0.9; 31 cout<<"最低的价格为:"<<sum<<endl; 32 break; 33 case 4: 34 sum = 2*p*INIT*0.75*5+p*INIT*0.8; 35 cout<<"最低的价格为:"<<sum<<endl; 36 break; 37 case 5: 38 sum = 2*p*INIT*0.75*5+p*INIT*0.75; 39 cout<<"最低的价格为:"<<sum<<endl; 40 break; 41 case 6: 42 sum = (2*p+1)*INIT*5*0.75+INIT; 43 cout<<"最低的价格为:"<<sum<<endl; 44 break; 45 case 7: 46 sum= (2*p+1)*INIT*5*0.75+2*INIT*0.95; 47 cout<<"最低的价格为:"<<sum<<endl; 48 break; 49 case 8: 50 sum = 2*p*INIT*5*0.75+4*INIT*0.8*2; 51 cout<<"最低的价格为:"<<sum<<endl; 52 break; 53 case 9: 54 sum = (2*p+1)*INIT*5*0.75+4*INIT*0.8; 55 cout<<"最低的价格为:"<<sum<<endl; 56 break; 57 default: 58 cout<<"Data Error!"<<endl; 59 } 60 } 61 int main() 62 { 63 int count; 64 int sum=0; 65 cout<<"请输入购书数目:"; 66 cin>>count; 67 int p = count/10; 68 int q = count%10; 69 Price(p,q,sum); 70 return 0; 71 }
五、总结
本次练习中,题目思路主要是通过判断输入的数量,将其%10取余,主要是判断余数部分是1~9的哪一种情况,每种情况对应一种最优的打折情况,剩余部分将其划分为五本书一组,进行25%的打折,这样即可求出最优的折扣来购书。
时间: 2024-12-17 04:27:05