课堂练习---最低价格买书
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
本数 折扣
2 5%
3 10%
4 20%
5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
思路:首先算出1到10本的最低价格,
1本 8元
2本 15.2元 按照两本的折扣 (和上一个阶段差7.2元)
3本 21.6元 按照三本折扣 不能按照2 1分 (和上一个阶段差6.4元)
4本 25.6元 按照4本折扣(和上一个阶段差4元)
5本 30元 按照5本折扣 (和上一个阶段差4.4元)
6本 38元 按照5+1本 最优
7本 45.2元 按照4+3本 最优
8本 51.2元 按照4+4本 最优
9本 55.6元 5+4本 最优
10本 60元 5+5本 最优
发现:首先在纸上从1开始计算找规律,发现当这个数依次减5后出现8时,买2套4卷不一样的书时价格是最便宜的,其他情况下都是买5卷不一样的,然后剩下小于5本的就按照折扣价格购买。
源代码:
#include <iostream> using namespace std; void main() { int n; //书的本数 int a = 0, b = 0; //a为当本数大于5的时候,表示有几个5,则计算几倍的5本价钱。b表示剩余的不足5本的价格。 double sum; //sum表示总价格 cout << "请输入要买的书的本数:" << endl; cin >> n; a = n / 5; b = n % 5; if(n == 3) sum = 3 * 8 * (1 - 0.1); else { if(b == 0) sum = a * 5 * 8 * (1 - 0.25); if(b == 1) sum = a * 5 * 8 * (1 - 0.25) + 8; if(b == 2) sum = a * 5 * 8 * (1 - 0.25) + 2 * 8 * (1 - 0.05); if(b == 3) sum = (n - 8) / 5 * 5 * 8 * (1 - 0.25) + 4 * 2 * 8 * (1 - 0.2); if(b == 4) sum = a * 5 * 8 * (1 - 0.25) + 4 * 8 * (1 - 0.2); } cout << "总价格为:" << sum << "元。" << endl; }
总结:题本身很简单,只要从第一本开始列出来,找出其中的规律,程序思路很容易就出来了。