• 课堂练习——买书问题


    一、题目及要求

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

                                  

    本数 折扣
    2 5%
    3 10%
    4 20%
    5 25%

     

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

    周总结

    100 200         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

    编写程序

    作业

     

     

    七、个人总结

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

  • 相关阅读:
    [转载]tlb、tlh和tli文件的关系
    [转载]美国不是中国唯一的榜样
    使用spring.net 1.3.2框架部署在虚拟目录上发生错误
    用Log4Net记录NHibernate中执行的SQL语句及执行时间
    IIS7/8 HTTP Error 500.19 错误 0x80070021
    IE下点击scrollbar会导致焦点移动到body
    性能测试学习(一)--基础知识点
    测试基础知识点汇总
    如何制定测试计划
    《软件测试经验与教训》摘录
  • 原文地址:https://www.cnblogs.com/a1397240667/p/5550978.html
Copyright © 2020-2023  润新知