软件工程课堂作业(十二)——计算最优惠价格

一、题目:

      书店针对《哈利波特》系列书籍进行促销活动,一共5卷,单独一卷售价8元,具体折扣如下:本数对应的折扣分别为:2本—5%,3本—10%,4本—20%,5本—25%。根据购买的卷数以及本数,会对应不同的折扣规则情况。单独一本书只会对应一个折扣规则。设计算法能够计算出读者购买一批书的最低价格。

二、设计思路:

      首先买两本以上才会享受折扣,先算出5、6、7、8、9五种情况下最优惠价格。

      10本以上则是重复了这5种情况,将10本以上的拆为10种以下的情况。比如,当购买的这批书很多时,每5本享受的折扣是最多的,所以可看这批书最多包含多少5本,剩下一个5本和余数凑成一批10以下的情况,这样是最优惠的方法。

三、源代码:

 1 //计算一批书最优惠价格——胡亚宝——15/04/14
 2 
 3 #include "stdafx.h"
 4 
 5 
 6 int _tmain(int argc, _TCHAR* argv[])
 7 {
 8     int booknum;
 9     double bookmon;
10     double a[5]={30,38,45.2,51.2,55.6};
11     printf("请输入要买的本书:");
12     scanf("%d",&booknum);
13 
14     bookmon=((booknum-(booknum%5+5))/5)*30+a[booknum%5];
15 
16     printf("最优惠价格为:%lf
",bookmon);
17     
18     return 0;
19 }

四、运行结果:

五、心得体会:

      开始拿到这个题目的时候,我理解的是要根据买的书目不同价格不同,其实每本书的价格都是一样的。

      在解决这个问题的时候,首先我没有很好的思路,于是我从买5本书开始算,在算的过程中我发现,当数目越来越大时,其实是可以直接用前面的结果的,类似于递归算法。特别是在10的前后,因为当本数足够大时,每5本享受的优惠最高,所以要看它其中包含的5有多少,但是不能把5全部用掉,因为那样只剩下余数,可以将最后一个5与余数组合,成为一个小于10的组合,这样根据前面算出的5、6、7、8、9的最优惠价格计算出总的最优惠价格。

      至于实现这个算法,可用输入的本数模5,结果加5,就与5、6、7、8、9这5种有关,根据它们的情况进行计算即可。

      在理清思路后编程的过程中我也出现了几个小的错误。其中有价格变量bookmon的类型问题,之前没有考虑就将之设置为整型int,在编译时发现并改正了这个问题。

原文地址:https://www.cnblogs.com/huyabaoboke/p/4425929.html