课堂练习——买书问题

一、题目及要求

书店针对《哈利波特》系列书籍进行促销活动,一共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)输出所得结果

 

三、源代码

 

 1 /*2016.6.2 weilihua 买书问题*/
 2 #include<iostream>
 3 using namespace std;
 4 int main()
 5 {
 6       int book_num=0;
 7       int shangshu;//商数
 8       int yushu=0;//余数
 9       double ys_money;//余数部分对应钱
10       double money;//总钱数
11       while (book_num==NULL||book_num == 0)//如果书数为空或零则请重新输入
12       {
13         cout<<"请输入买书数量:";
14         cin>>book_num;
15        }
16       shangshu=book_num/10;
17       yushu=book_num%10;
18       switch(yushu)
19       {
20       case 0:
21           ys_money=0;
22       break;
23       case 1:
24            ys_money=8;
25       break;
26       case 2:
27            ys_money=15.2;
28       break;
29       case 3:
30            ys_money=21.6;
31       break;
32       case 4:
33            ys_money=25.6;
34       break;
35       case 5:
36            ys_money=30;
37       break;
38       case 6:
39            ys_money=38;
40       break;
41       case 7:
42            ys_money=45.2;
43       break;
44       case 8:
45            ys_money=51.2;
46       break;
47        case 9:
48            ys_money=55.6;
49       break;
50       }
51       money= shangshu*60+ ys_money;
52       cout<<"一共花"<<money<<""<<endl;
53       cout<<"购买计划如下:"<<endl;
54      
55       if((yushu==8))//购买本数余数为8时特殊处理
56       {
57       cout<<"需购买"<<shangshu*2<<"套和和两套中的不同4本"<<endl;
58       }
59       else if((yushu==5)||(yushu==0))//余数为5或0时为整套
60       {
61            cout<<"需购买"<<book_num/5<<""<<endl;
62       }
63       else if(yushu>5)//余数大于5时情况(排除8)
64       {
65       cout<<"需购买"<<book_num/5<<"套和"<<"一套中的不同"<<yushu%5<<""<<endl;
66       } 
67       else if(yushu>0)//余数小于5情况(排除0)
68       {
69       cout<<"需购买"<<shangshu*2<<"套和"<<"一套中的不同"<<yushu<<""<<endl;
70       }
71     
72         return 0;
73 }

 

 

四、截图

五、项目计划日志

周活动总结表

姓名:魏**                  日期2016.6.2

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

周一

100     100

周三

  100    100

周四

 100    100

周总结

100200    300

阶段时间和效率                                            周数(上一次周活动表的周数+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

编写程序

作业

 

 

七、个人总结

  这次买书问题,上课时老师提醒枚举的方法找出规律,把不同的特例单独解决,本以为实现时会很简单,但在实现过程中发现仍然要细心才能解决。

转载于:https://www.cnblogs.com/a1397240667/p/5550978.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值