1.题目:
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元,具体折扣如下所示:
本数 折扣
2 5%
3 10%
4 20%
5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
2.设计思路
刚开始看到这个题目时,感觉挺难的,感觉有好多种情况,后来仔细阅读题目后,跟同学讨论分析后,发现这个题目其实就是将数字分解,知道这么回事后,就开始分析每一个数,分析过程中发现其实小于5的数字不用分析,只需要分析6-9的数字就行,之后的数都会循环。针对6-9之间的数字进行分析,将各种情况进行计算,最终得到结论:
6=5+1
7=5+2
8=4+4
9=5+4
这样就会扩大到一般情况。
3.源代码
#include<iostream> using namespace std; double mSum(int n) { int m = 0; double money; m = n % 5; m = m + 5; switch (m) { case 5: money = n * 8 * 0.75; break; case 6: money = (n - 1) * 8 * 0.75 + 8; break; case 7: money = (n - 2) * 8 * 0.75 + 8 * 2 * 0.95; break; case 8: money = (n - 8) * 8 * 0.75 + 4 * 8 * 0.8 * 2; break; case 9: money = (n - 4) * 8 * 0.75 + 8 * 4 * 0.8; break; } return money; } int main() { int n; cout << "请输入购买数量:" << endl; cin >> n; cout << endl; cout << "最优惠总书价:" << mSum(n) << "元" << endl; }
4.程序截图
5.总结
要学会把实际问题抽象出来,将实际问题转化为比较容易懂的模型。对于感觉比较复杂的程序,要注意分析情况的特殊性,先分析比较少的数,由特殊到一般,从而找出规律,这样程序就会简单许多。