软件工程课堂作业(十二)——计算最优惠价格
2015-04-14 20:13
183 查看
一、题目:
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,单独一卷售价8元,具体折扣如下:本数对应的折扣分别为:2本—5%,3本—10%,4本—20%,5本—25%。根据购买的卷数以及本数,会对应不同的折扣规则情况。单独一本书只会对应一个折扣规则。设计算法能够计算出读者购买一批书的最低价格。
二、设计思路:
首先买两本以上才会享受折扣,先算出5、6、7、8、9五种情况下最优惠价格。
10本以上则是重复了这5种情况,将10本以上的拆为10种以下的情况。比如,当购买的这批书很多时,每5本享受的折扣是最多的,所以可看这批书最多包含多少5本,剩下一个5本和余数凑成一批10以下的情况,这样是最优惠的方法。
三、源代码:
四、运行结果:
![](http://images.cnitblog.com/blog2015/726965/201504/142000563071110.png)
![](http://images.cnitblog.com/blog2015/726965/201504/142001080427059.png)
五、心得体会:
开始拿到这个题目的时候,我理解的是要根据买的书目不同价格不同,其实每本书的价格都是一样的。
在解决这个问题的时候,首先我没有很好的思路,于是我从买5本书开始算,在算的过程中我发现,当数目越来越大时,其实是可以直接用前面的结果的,类似于递归算法。特别是在10的前后,因为当本数足够大时,每5本享受的优惠最高,所以要看它其中包含的5有多少,但是不能把5全部用掉,因为那样只剩下余数,可以将最后一个5与余数组合,成为一个小于10的组合,这样根据前面算出的5、6、7、8、9的最优惠价格计算出总的最优惠价格。
至于实现这个算法,可用输入的本数模5,结果加5,就与5、6、7、8、9这5种有关,根据它们的情况进行计算即可。
在理清思路后编程的过程中我也出现了几个小的错误。其中有价格变量bookmon的类型问题,之前没有考虑就将之设置为整型int,在编译时发现并改正了这个问题。
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,单独一卷售价8元,具体折扣如下:本数对应的折扣分别为:2本—5%,3本—10%,4本—20%,5本—25%。根据购买的卷数以及本数,会对应不同的折扣规则情况。单独一本书只会对应一个折扣规则。设计算法能够计算出读者购买一批书的最低价格。
二、设计思路:
首先买两本以上才会享受折扣,先算出5、6、7、8、9五种情况下最优惠价格。
10本以上则是重复了这5种情况,将10本以上的拆为10种以下的情况。比如,当购买的这批书很多时,每5本享受的折扣是最多的,所以可看这批书最多包含多少5本,剩下一个5本和余数凑成一批10以下的情况,这样是最优惠的方法。
三、源代码:
//计算一批书最优惠价格——胡亚宝——15/04/14 #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int booknum; double bookmon; double a[5]={30,38,45.2,51.2,55.6}; printf("请输入要买的本书:"); scanf("%d",&booknum); bookmon=((booknum-(booknum%5+5))/5)*30+a[booknum%5]; printf("最优惠价格为:%lf\n",bookmon); return 0; }
四、运行结果:
![](http://images.cnitblog.com/blog2015/726965/201504/142000563071110.png)
![](http://images.cnitblog.com/blog2015/726965/201504/142001080427059.png)
五、心得体会:
开始拿到这个题目的时候,我理解的是要根据买的书目不同价格不同,其实每本书的价格都是一样的。
在解决这个问题的时候,首先我没有很好的思路,于是我从买5本书开始算,在算的过程中我发现,当数目越来越大时,其实是可以直接用前面的结果的,类似于递归算法。特别是在10的前后,因为当本数足够大时,每5本享受的优惠最高,所以要看它其中包含的5有多少,但是不能把5全部用掉,因为那样只剩下余数,可以将最后一个5与余数组合,成为一个小于10的组合,这样根据前面算出的5、6、7、8、9的最优惠价格计算出总的最优惠价格。
至于实现这个算法,可用输入的本数模5,结果加5,就与5、6、7、8、9这5种有关,根据它们的情况进行计算即可。
在理清思路后编程的过程中我也出现了几个小的错误。其中有价格变量bookmon的类型问题,之前没有考虑就将之设置为整型int,在编译时发现并改正了这个问题。
相关文章推荐
- 软件工程课堂作业——计算最优惠价格
- 软件工程课堂作业(九)——结对开发(四)
- 软件工程课堂作业(十六)——找“1”的个数
- 软件工程课堂作业(一)——随机产生四则运算题目(C++)
- 软件工程课堂作业(八)——结对开发(三)
- 软件工程课堂作业——购书问题
- 软件工程课堂作业(十三)——电梯调度
- 软件工程课堂作业(十五)——揪出“水王”续
- 软件工程课堂作业——寻找“水王”
- 软件工程课堂作业(七)——电梯调度之需求规格说明书
- 现代软件工程作业 – 计算最长英语单词链
- 软件工程课堂作业(四)——结对开发(一)
- 软件工程课堂练习&课下作业
- 软件工程课堂作业(十)——结对开发(五)
- 第一次课堂作业——计算圆的面积
- 软件工程课堂作业(二)——升级版随机产生四则运算题目设计思想
- 软件工程课堂作业(五)——终极版随机产生四则运算题目(C++)
- 软件工程课堂作业——寻找“水王”
- 软件工程课堂作业——二维数组最大联通子数组的和
- 软件工程个人作业4(课堂练习&&课堂作业)