课堂练习——如何使读者以最大折扣购买一批书
题目要求:
某书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元,具体折扣如下所示:
本数 折扣
2 5%
3 10%
4 20%
5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
一 设计思想
1.购买少于5本按该本数对应的折扣购买;
2.购买6、7、8、9本书时,分为两组(1、5,4、4.....)来获得最大折扣;
3.购买多于十本时,可以转化为购买6、7、8、9本书时的情况;
二 程序代码
#include "stdafx.h" #include<iostream.h> double num1(int a){ //买书的本数为6、7、8、9 double sum1; switch(a%5) { case 1: sum1=5*8*0.75+8;break; case 2: sum1=5*8*0.75+2*8*0.95;break; case 3: sum1=4*8*0.8+4*8*0.8;break; case 4: sum1=5*8*0.75+4*8*0.8;break; } return sum1; //返回最大折扣 } int main(int argc, char* argv[]) { int num; double sum; //最大折扣 cout<<"请输入您要购买的本数:"; cin>>num; if(num<=5) { switch(num) { case 1: sum=8;break; case 2: sum=2*8*0.95;break; case 3: sum=3*8*0.9;break; case 4: sum=4*8*0.8;break; case 5: sum=5*8*0.75;break; } } if((num>5)&&(num<10)) { sum=num1(num); //大于5小于10时,调用num1函数 } if(num>9) //大于等于10之后的,可以转化为6、7、8、9的情况计算 { switch(num%5) { case 0: sum=(num/5)*8*5*0.75;break; case 1: sum=(num/5-1)*5*8*0.75+num1(6);break; case 2: sum=(num/5-1)*8*5*0.75+num1(7);break; case 3: sum=(num/5-1)*8*5*0.75+num1(8);break; case 4: sum=(num/5-1)*8*5*0.75+num1(9);break; } } cout<<"最大折扣价为:"<<sum; cout<<endl; return 0; }
三 结果截屏
四 心得体会
第一次看到这个题目时,思路很模糊,不知道该如何下手,不知道该怎么分配才能得到最大折扣价值,后来通过老师和同学们的讨论,自己也拿起笔来算,就可以发现买多于5本书都可以转化为6、7、8、9这四种情况,便可以解决若干本书的购买折扣问题。
面对一个看似难以解决无从下手的题目时,要寻找规律,寻求一种好的解决思路之后再下手。