您的位置:首页 > 其它

课堂练习——买书问题

2016-06-02 15:23 441 查看
一、题目及要求

书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:

本数折扣
25%
310%
420%
525%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷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 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

日期 任务听课 编写程序阅读书籍准备考试日总计
周一

100100
周三

100100
周四

100100
周总结

100200300
阶段时间和效率 周数(上一次周活动表的周数+1):

不包括上一周在内的累计时间

总计

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

编写程序

作业

七、个人总结

  这次买书问题,上课时老师提醒枚举的方法找出规律,把不同的特例单独解决,本以为实现时会很简单,但在实现过程中发现仍然要细心才能解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: