您的位置:首页 > 其它

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

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以下的情况,这样是最优惠的方法。

三、源代码:

//计算一批书最优惠价格——胡亚宝——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;
}


四、运行结果:





五、心得体会:

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

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

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

在理清思路后编程的过程中我也出现了几个小的错误。其中有价格变量bookmon的类型问题,之前没有考虑就将之设置为整型int,在编译时发现并改正了这个问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: