zoukankan      html  css  js  c++  java
  • 购书问题

    一、题目要求

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

                                   本数                  折扣

                                    2                       5%

                                    3                       10%

                                    4                       20%

                                    5                       25%

    根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
    设计算法能够计算出读者购买一批书的最低价格。
    二、设计思想
    题目的关键是解决当购买6、7、8、9本时应如何购买。经计算,6本时:1本+5本最优;7本时:2本+5本最优;8本时:4本+4本最优;9本时:4本+5本最优。1-5本时不用特殊考虑,其他本数时将其转换为6-9本的情况处理。即将本数对10求余,余数大于5则将求余结果带入6-9本情况中,同时计算减去余数后包含几个5;余数小于五则直接计算减去余数后包含几个5,再加上余数的买书计算结果。
    三、代码
     1 #include<iostream.h>
     2 
     3 void show(int x , double &sum)
     4 {
     5     if(x==6)
     6     {
     7         cout<<"5本一组,1本一组来购买";
     8         sum=sum+5*8*0.75+8;
     9     }
    10     if(x==7)
    11     {
    12         cout<<"5本一组,2本一组来购买";
    13         sum=sum+5*8*0.75+2*8*0.95;
    14     }
    15     if(x==8)
    16     {
    17         cout<<"4本一组,4本一组来购买";
    18         sum=sum+8*8*0.8;
    19     }
    20     if(x==9)
    21     {
    22         cout<<"5本一组,4本一组来购买";
    23         sum=sum+5*8*0.75+4*8*0.8;
    24     }
    25 }
    26 
    27 void main()
    28 {
    29     cout<<"请输入要购买的本数:"<<endl;
    30     int num,a,b,i;
    31     double sum=0;
    32     cin>>num;
    33     cout<<"最优惠的方案是:"<<endl;
    34     a=num%10;
    35     if(a>5)
    36     {
    37         b=num/5-1;
    38         for(i=1;i<=b;i++)
    39         {
    40             cout<<"5组一本,";
    41         }
    42         sum=sum+b*8*5*0.75;
    43         show(a,sum);
    44     }
    45     else if(a<5&&a>0)
    46     {
    47         a=a+5;
    48         b=num/5-1;
    49         for(i=1;i<=b;i++)
    50         {
    51             cout<<"5组一本,";
    52         }
    53         sum=sum+b*8*5*0.75;
    54         show(a,sum);
    55     }
    56     else
    57     {
    58         b=num/5;
    59         for(i=1;i<=b;i++)
    60         {
    61             cout<<"5组一本,";
    62         }
    63         sum=sum+b*8*5*0.75;
    64     }
    65     cout<<endl<<"一共花费"<<sum<<""<<endl;
    66 }

    四、运行结果截图

     

    五、总结

    这次题目是对设计好的算法的练习,一开始感觉用程序实现可以考虑遍历,枚举所有情况再找最小值,不会漏掉情况。但发现这样比较繁琐,而且在算法实现上最为耗时,不是最简洁的。然后通过计算购买6-9本的情况发现规律,和结对的同学讨论出了算法并实现。

  • 相关阅读:
    ZJOI2018]历史 做题心得 Flandre
    Codeforces 1495F 搞了一上午的心得 Flandre
    关于JS的跨域通信的几种解决方案 (转)
    我对php框架的理解和看法
    ob_get_contents();ob_end_clean();ob_start();的具体用法
    MySQL性能优化 (转载)
    遇到过的一些php笔试题
    php memcached 安装 install(转载)
    [转]mysql_fetch_row,mysql_fetch_array,mysql_fetch_object,mysql_fetch_assoc的区别
    深度探讨PHP之性能(看到的好文章,就转载啦)
  • 原文地址:https://www.cnblogs.com/dr73/p/4429317.html
Copyright © 2011-2022 走看看