课堂练习——买书问题
2016-06-02 15:23
441 查看
一、题目及要求
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。设计算法能够计算出读者购买一批书的最低价格。
二、设计思路
分析如下:
先找规律:
买1本: 1*8=8
买2本: 2*8*(1-5%)=15.2
买3本: 3*8*(1-10%)=21.6
买4本: 4*8*(1-20%)=25.6
买5本: 5*8*(1-25%)=30 一套
买6本: 1*8+5*8*(1-25%)=38 最优(一套一本)
2*8*(1-5%)+4*8*(1-20%)=40.8
3*8*(1-10%)+3*8*(1-10%)=43.2
买7本最优:2*8*(1-5%)+5*8*(1-25%)=45.2 (一套二本)
买8本最优:4*8*(1-20%)+4*8*(1-20%)=51.2 (两套中的不同4本)
买9本最优:4*8*(1-20%)+5*8*(1-25%)=55.6 (一套四本)
买10本最优: 5*8*(1-25%)+ 5*8*(1-25%)=60 (两套)
....
由上可知:除了买8本时最优解不含5,其他为1+5,2+5,4+5,5+5.
所以可以除以10取余数。如11即为10+1,12为10+2....
即
所花费用=除以10的商*60+个位数所对应钱(所取余数对应情况)
购买计划:
除了余数为8时:商数*2套书和上面所列情况
余数为8时:商数*2套书和两套中的不同4本
算法:
(1)获取输入的书数
(2)求得书数的余数与商
(3)利用switch语句或if语句选择对应的情况,计算余数对应本数所花费钱
(4)输出所得结果
三、源代码
五、项目计划日志
周活动总结表
姓名:魏** 日期2016.6.2
阶段时间和效率 周数(上一次周活动表的周数+1):
不包括上一周在内的累计时间
以前各周的累计时间
六、时间记录表:
学生 魏** 日期 2016年6月2日
教师 王** 课程 软件工程
七、个人总结
这次买书问题,上课时老师提醒枚举的方法找出规律,把不同的特例单独解决,本以为实现时会很简单,但在实现过程中发现仍然要细心才能解决。
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:
本数 | 折扣 |
2 | 5% |
3 | 10% |
4 | 20% |
5 | 25% |
二、设计思路
分析如下:
先找规律:
买1本: 1*8=8
买2本: 2*8*(1-5%)=15.2
买3本: 3*8*(1-10%)=21.6
买4本: 4*8*(1-20%)=25.6
买5本: 5*8*(1-25%)=30 一套
买6本: 1*8+5*8*(1-25%)=38 最优(一套一本)
2*8*(1-5%)+4*8*(1-20%)=40.8
3*8*(1-10%)+3*8*(1-10%)=43.2
买7本最优:2*8*(1-5%)+5*8*(1-25%)=45.2 (一套二本)
买8本最优:4*8*(1-20%)+4*8*(1-20%)=51.2 (两套中的不同4本)
买9本最优:4*8*(1-20%)+5*8*(1-25%)=55.6 (一套四本)
买10本最优: 5*8*(1-25%)+ 5*8*(1-25%)=60 (两套)
....
由上可知:除了买8本时最优解不含5,其他为1+5,2+5,4+5,5+5.
所以可以除以10取余数。如11即为10+1,12为10+2....
即
所花费用=除以10的商*60+个位数所对应钱(所取余数对应情况)
购买计划:
除了余数为8时:商数*2套书和上面所列情况
余数为8时:商数*2套书和两套中的不同4本
算法:
(1)获取输入的书数
(2)求得书数的余数与商
(3)利用switch语句或if语句选择对应的情况,计算余数对应本数所花费钱
(4)输出所得结果
三、源代码
/*2016.6.2 weilihua 买书问题*/ #include<iostream> using namespace std; int main() { int book_num=0; int shangshu;//商数 int yushu=0;//余数 double ys_money;//余数部分对应钱 double money;//总钱数 while (book_num==NULL||book_num == 0)//如果书数为空或零则请重新输入 { cout<<"请输入买书数量:"; cin>>book_num; } shangshu=book_num/10; yushu=book_num%10; switch(yushu) { case 0: ys_money=0; break; case 1: ys_money=8; break; case 2: ys_money=15.2; break; case 3: ys_money=21.6; break; case 4: ys_money=25.6; break; case 5: ys_money=30; break; case 6: ys_money=38; break; case 7: ys_money=45.2; break; case 8: ys_money=51.2; break; case 9: ys_money=55.6; break; } money= shangshu*60+ ys_money; cout<<"一共花"<<money<<"元"<<endl; cout<<"购买计划如下:"<<endl; if((yushu==8))//购买本数余数为8时特殊处理 { cout<<"需购买"<<shangshu*2<<"套和和两套中的不同4本"<<endl; } else if((yushu==5)||(yushu==0))//余数为5或0时为整套 { cout<<"需购买"<<book_num/5<<"套"<<endl; } else if(yushu>5)//余数大于5时情况(排除8) { cout<<"需购买"<<book_num/5<<"套和"<<"一套中的不同"<<yushu%5<<"本"<<endl; } else if(yushu>0)//余数小于5情况(排除0) { cout<<"需购买"<<shangshu*2<<"套和"<<"一套中的不同"<<yushu<<"本"<<endl; } return 0; }
四、截图
五、项目计划日志
周活动总结表
姓名:魏** 日期2016.6.2
日期 任务 | 听课 | 编写程序 | 阅读书籍 | 准备考试 | 日总计 | ||
周一 | 100 | 100 | |||||
周三 | 100 | 100 | |||||
周四 | 100 | 100 | |||||
周总结 | 100 | 200 | 300 |
不包括上一周在内的累计时间
总计 | 100 | 200 | 300 | ||||
平均 | 100 | 200 | 300 | ||||
最大 | 100 | 200 | 300 | ||||
最小 | 100 | 200 | 300 |
总计 | 100 | 200 | 300 | ||||
平均 | 100 | 200 | 300 | ||||
最大 | 100 | 200 | 300 | ||||
最小 | 100 | 200 | 300 |
学生 魏** 日期 2016年6月2日
教师 王** 课程 软件工程
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
5.30 | 14:30 | 16;20 | 10 | 100 | 上课 | |
6.1 | 22:00 | 23:50 | 10 | 100 | 编写程序 | |
6.2 | 14:30 | 16:30 | 无 | 100 | 编写程序 | 作业 |
这次买书问题,上课时老师提醒枚举的方法找出规律,把不同的特例单独解决,本以为实现时会很简单,但在实现过程中发现仍然要细心才能解决。
相关文章推荐
- js 日期大小比较
- 计算机图形学基础(零) 介绍
- GoEasy如何取消订阅呢
- 微信自定义菜单集成多客服功能的方法与总结
- 奥妙重重的Fibonacci数列
- 添加系统用户,从一个文件列表里。
- J2ee项目从0搭建(三):eclipse中用Maven创建Web项目
- JSP入门详解
- Asp.net MVC中的ViewData与ViewBag
- 面试必备之快速排序
- Java静态导入
- 详解Python中的__new__、__init__、__call__三个特殊方法
- jQuery.extend 函数详解
- Mysql两种安装方式比较
- INVALID BINARY : Your binary is not optimized for iPhone 5 As of May 1
- 【BZOJ1300】[LLH邀请赛]大数计算器【快速幂】【姿势】
- 查询条件在刷新页面后继续显示
- Activity
- bagging简介
- Delphi_MemoryModule — load DLL from memory. Also includes hooking utilities.