Task 7 买书最低价格问题
任务:
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示: 本数 折扣
2 5%
3 10%
4 20%
5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。 设计算法能够计算出读者购买一批书的最低价格。 要求将设计思想、代码实现、实现截图、个人总结以博文的形式发表。(截止日期2015-5-12晚18:00)
1.设计思想:这是一道很经典的数学题,感觉很像奥林匹克那种竞赛题,所以只要做出把数学题算出来就可以很容易的编程实现了。首先,假设要购买N本书,购买1-5本书时,是购买N本为最低价;
根据规律,可以得出N>9时 ,当N除以10所得余数为8时,最低价情况是N/10组5本书,两组4本书的组合;余数不为8时,最低价情况就是N/5组5本书,一组N%5本书的组合。然后根据这个规律把程序写出来即可。
2.源代码:
#include<iostream> using namespace std; void main() { int n; cout << "请输入购买数量:" << endl; cin >> n; double price; int i = n % 5; switch (i) { case 0: price = n * 8 * 0.75; cout << "最低价是购买" << n / 5 << "套整5卷书"; break; case 1: price = (n - 1) * 8 * 0.75 + 8; cout << "最低价是购买" << (n - 1) / 5 << "套整5卷书和五卷书中任意一本。" << endl; break; case 2: price = (n - 2) * 8 * 0.75 + 2 * 8 * 0.95; cout << "最低价是购买" << (n - 1) / 5 << "套整5卷书和五卷书中任意两本。" << endl; break; case 3: price = (n - 8) * 8 * 0.75 + 4 * 8 * 0.8 * 2; cout << "最低价是购买" << (n - 8) / 5 << "套整5卷书和两套任意四卷" << endl; break; case 4: price = (n - 4) * 8 * 0.75 + 4 * 8 * 0.8; cout << "最低价是购买" << (n - 1) / 5 << "套整5卷书,和五卷书中任意四本。" << endl; break; } cout << "最低价格是:" << price << endl; }
3.实验截图:
4.实验总结:(1)有人说写程序就是在做数学题,这道题就是一个很典型的例子,只有当把这道题做出来的时候才能变成程序.
(2)写程序很重要的一点就是要敢于尝试,如果什么也不干就妄想写出什么是不可能的。
(3)要善于寻找事物的规律,开始的时候大家都没有仔细地分析运算,每个人都在抱怨这道题有多难、多复杂,可是在真正动手之后找到规律了才焕然大悟这题是有多简单。可见实践和动手是非常重要的。