题目:书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
本数 |
折扣 |
2 |
5% |
3 |
10% |
4 |
20% |
5 |
25% |
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
思路:通过如下计算:
本数 |
优惠价格 |
本数 |
优惠价格 |
1 |
8 |
6 |
30+8=38 |
2 |
15.2 |
7 |
30+15.2=45.2 |
3 |
21.6 |
8 |
30+25.6*2=51.2 |
4 |
25.6 |
9 |
30+25.6=55.6 |
5 |
30 |
10 |
30*2=60 |
可得规律是:当数量超过一套时,优先一套购买。其中若大于5本且多出3本构成8余数的,优惠价格要按照(n/5-1)*8*0.75+25.6*2单独来算。
代码:
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int num,k; 7 double price; 8 xunhuan: 9 cout << "输入购买书的数量:"; 10 cin >> num; 11 k = num % 5; 12 k = k + 5; 13 switch (k) 14 { 15 case 5: 16 price = num * 8 * 0.75; 17 break; 18 case 6: 19 price= (num - 1) * 8 * 0.75 + 8; 20 break; 21 case 7: 22 price= (num- 2) * 8 * 0.75 + 8 * 2 * 0.95; 23 break; 24 case 8: 25 price= (num - 8) * 8 * 0.75 + 4 * 8 * 0.8 * 2; 26 break; 27 case 9: 28 price= (num - 4) * 8 * 0.75 + 8 * 4 * 0.8; 29 break; 30 } 31 cout << "购买"<<num<<"本书最折扣的价格是:"<<price<< endl; 32 int cont; 33 cout << "是否继续?(1:是 2:否)"<<endl; 34 cin >> cont; 35 switch (cont) 36 { 37 case 0: 38 cout << "退出!"; 39 break; 40 case 1: 41 goto xunhuan; 42 break; 43 } 44 return 0; 45 }
运行结果截图:
总结:刚开始感觉一点思路都没有,而且上课老师让先拿笔计算的时候自己都能算错,然后就一点而都找不出规律,后来经过老师的点拨,发现原来是这么回事,所以说,有时候会编程并不重要,重要的是编程的思路。