课堂练习-购书问题
问题:
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
本数 |
折扣 |
2 |
5% |
3 |
10% |
4 |
20% |
5 |
25% |
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。设计算法能够计算出读者购买一批书的最低价格。
解决方法:当购买书籍在1-5本之间的时候,购买不同的书籍最省钱,当购买6本时有3+3,4+2,5+1这三种方法,计算得5+1这种方法最省钱,当购买7本时有4+3,5+2这两种方法,计算得5+2这种方法最省钱,当购买8本时有4+4,5+3这两种方法,计算得4+4这种方法最省钱,当购买9本时有5+4这种方法,计算得5+4这种方法最省钱。当购买10本时有5+5这种方法,计算得5+5这种方法最省钱。由此分析得购买数量是以10本为一个周期。当购买数量超过10本时,进入下一个循环周期。
代码:
//李妍 //20133093 #include<iostream> using namespace std; int Money(int num) { double money; int N = (int) (num / 10); switch (num % 10){ case 0: money = 0; break; case 1: money = 1 * 8; break; case 2: money = 2 * 8 * 0.95; break; case 3: money = 3 * 8 * 0.9; break; case 4: money = 4 * 8 * 0.8; break; case 5: money = 5 * 8 * 0.75; break; case 6: money = 1 * 8 + 5 * 8 * 0.75; break; case 7: money = 5 * 8 * 0.75 + 2 * 8 * 0.95; break; case 8: money = 4 * 8 * 0.8 * 2; break; case 9: money = 5 * 8 * 0.75 + 4 * 8 * 0.8; break; } return N * 5 * 8 * 0.75 * 2 + money; } int main() { int num = 0;//数量 cout << "请输入要买书的数量:" << endl; cin >> num; while (num == 0){ cout << "要买书的数量不能为0!请重新输入:" << endl; cin >> num; } cout << "当买" << num << "本书时,花费最少钱是:" << Money(num)<<"元。" << endl; return 0; }
试验结果:
试验总结:
本次试验要求学会总结规律,将一些困难问题仔细分析,通过寻找他们之间的规律,将问题简单化。老师在下课之前简单的说了一下编程思路,我就恍然大悟。我觉得读懂题目真的很重要,要注意培养自己读题审题的能力。