买书问题
1、题目及要求
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
本数 | 折扣 |
2 | 5% |
3 | 10% |
4 | 20% |
5 | 25% |
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。设计算法能够计算出读者购买一批书的最低价格。
2、实验思路
通过对买书优惠找规律可得:
当买的数量为1-5本时,肯定买不同的最便宜
当买的数量为6时最优为,买一套+任意一本
当买的数量为7时最优为:买一套+任意不同的两本
当买的数量为8时最优为:不同的四本各买两本
当买的数量为9时最优为:买一套+任意不同的四本
当买的数量为10时最优为:买两套
所以任意买的书的数量都可以除以时求余数,商部分则按两套来算,余部分则按1-10之间选择最优。
3、实验代码
1 #include<iostream> 2 using namespace std; 3 4 5 int main() 6 { 7 int x, a, b;//x为买书的数量 8 double num,num1; 9 cout << "请输入书本数:"; 10 cin >> x; 11 a = x / 10; 12 b = x % 10; 13 num1 = 10 * 8 * a * (1 - 0.25); 14 if (b == 0) 15 { 16 num = num1; 17 } 18 else if (b == 1) 19 { 20 num = num1 + 8; 21 } 22 else if (b == 2) 23 { 24 num = num1 + 2 * 8 *(1-0.05); 25 } 26 else if (b == 3) 27 { 28 num = num1 + 3 * 8*(1 - 0.1); 29 } 30 else if (b == 4) 31 { 32 num = num1 + 4 * 8*(1 - 0.2); 33 } 34 else if (b == 5) 35 { 36 num = num1 + 5 * 8*(1 - 0.25); 37 } 38 else if (b == 6) 39 { 40 num = num1 +30+ 8; 41 } 42 else if (b == 7) 43 { 44 num = num1+30 + 2 * 8*(1 - 0.05); 45 } 46 else if (b == 8) 47 { 48 num = num1 + 8 * 8 * (1-0.2); 49 } 50 else if (b == 9) 51 { 52 num = num1 + 30 + 4* 8 * (1-0.2); 53 } 54 cout << "读者购买这批书的最低价格为:" << num<<endl; 55 return 0; 56 }
4、实验截图
5、时间记录日志(单位:h):
日期 | 开始时间 | 结束时间 | 中断时间(min) | 净时间(min) | 活动 | 备注 |
星期一 | 14:00 | 15:50 | 10(课间) | 100 | 听课 | 软件工程 |
星期三 | 15:00 | 17:00 | 10(休息) | 120 | 看书 | 人月神话 |
星期四 | 14:00 | 15:50 | 10(课间) | 100 | 上机 | 买书问题 |
星期五 | 18:30 | 19:10 | 10(休息) | 30 | 编程发博客 | 买书问题 |