题目:书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
本数 折扣
2 5%
3 10%
4 20%
5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
思路:
根据题目可以清楚点的知道在1-5本之间时,购买1、2、3、4、5本不同书籍最省钱,6本时是5+1,7本时是5+2,8本时是4+4,9本时是5+4,以上是最省钱的购买方式。
即假设购买的书籍是n本,则花费最少的金额为w,当n%5=0时,w=n*8*0.75;当n%5=1时,w=(n-1)*8*0.75+8;当n%5=2时,w=(n-2)*8*0.75+8*2*0.95;
当n%5=3时,w=(n-8)*8*0.75+8*8*0.8;当n%5=4时,w=(n-4)*8*0.75+4*8*0.8。以上就可以的得出最少花费的购买书籍的方式。
源代码:
1 #include <iostream> 2 using namespace std; 3 4 void main() 5 { 6 int n;//n为要购买书籍的数量 7 double w;//w为购买书籍所花费最少的金额 8 for(;;) 9 { 10 cout<<"请输入要购买书籍的数量:"<<endl; 11 cin>>n; 12 //按照购买不同数量书籍的情况来设计不同的表达式 13 if(n%5==0) 14 { 15 w=n*8*0.75; 16 } 17 else if(n%5+5==6) 18 { 19 w=(n-1)*8*0.75+8; 20 } 21 else if(n%5+5==7) 22 { 23 w=(n-2)*8*0.75+2*8*0.95; 24 } 25 else if(n%5+5==8) 26 { 27 w=(n-8)*8*0.75+8*8*0.8; 28 } 29 else if(n%5+5==9) 30 { 31 w=(n-4)*8*0.75+4*8*0.8; 32 } 33 cout<<"买这批书花费最少为:"<<w<<"元"<<endl; 34 } 35 }
结果截图:
个人总结:
看到以上这类问题时,要用笔在纸上划一划,找找规律基本就能解决问题。