题目:
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
本数 折扣
2 5%
3 10%
4 20%
5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。 设计算法能够计算出读者购买一批书的最低价格。
设计思路:
列举
本数 价钱 原价 降价
1 8 8 0
2 16-16*%5 =15.2 16 0.8
3 3*8-3*8*%10 =21.6 24 2.4
4 32-32*%20 =25.8 32 6.4
5 40-40*%25 =30 40 10
本数 策略 价钱
6 3+3 43.2
6 1+5 38
6 2+4 41
本数 策略 价钱
7 1+6 46
7 2+5 45.2
7 3+4 47.4
本数 策略 价钱
8 1+7 53.2
8 2+6 53.2
8 3+5 51.6
8 4+4 51.6
本数 策略 价钱
9 1+8 59.6
9 2+7 60.4
9 3+6 59.6
9 4+5 55.8
根据上述分析,可知对于总的购买数量count,可以以10本分组,X=count/10;Y=count%10(求余);总钱数=X*60+根据Y获得的策略价钱;
代码:
#include<iostream> using namespace std; int main() { int x = 0, y = 0; //x:书的数目,y:余数 double money; //购书金额 cout << "输入图书的数量:"; cin >> x; y = x % 5; if (y == 0) money = (x / 5)*(5 * 8)*0.75; else if (y == 1) money = (x - y) / 5 * (5 * 8)*0.75 + y * 8; else if (y == 2) money = (x - y) / 5 * (5 * 8)*0.75 + y * 8 * 0.95; else if (y == 3) { if (x == 3) money = 21.6; else money = (x - 8) / 5 * (5 * 8)*0.75 + 51.2; } else money = (x - y) / 5 * (5 * 8)*0.75 + y * 8 * 0.8; cout << "最低价格是:" << money << endl; return 0; }
结果截图: