• 软件工程课堂作业(十二)——计算最优惠价格


    一、题目:

          书店针对《哈利波特》系列书籍进行促销活动,一共5卷,单独一卷售价8元,具体折扣如下:本数对应的折扣分别为:2本—5%,3本—10%,4本—20%,5本—25%。根据购买的卷数以及本数,会对应不同的折扣规则情况。单独一本书只会对应一个折扣规则。设计算法能够计算出读者购买一批书的最低价格。

    二、设计思路:

          首先买两本以上才会享受折扣,先算出5、6、7、8、9五种情况下最优惠价格。

          10本以上则是重复了这5种情况,将10本以上的拆为10种以下的情况。比如,当购买的这批书很多时,每5本享受的折扣是最多的,所以可看这批书最多包含多少5本,剩下一个5本和余数凑成一批10以下的情况,这样是最优惠的方法。

    三、源代码:

     1 //计算一批书最优惠价格——胡亚宝——15/04/14
     2 
     3 #include "stdafx.h"
     4 
     5 
     6 int _tmain(int argc, _TCHAR* argv[])
     7 {
     8     int booknum;
     9     double bookmon;
    10     double a[5]={30,38,45.2,51.2,55.6};
    11     printf("请输入要买的本书:");
    12     scanf("%d",&booknum);
    13 
    14     bookmon=((booknum-(booknum%5+5))/5)*30+a[booknum%5];
    15 
    16     printf("最优惠价格为:%lf
    ",bookmon);
    17     
    18     return 0;
    19 }

    四、运行结果:

    五、心得体会:

          开始拿到这个题目的时候,我理解的是要根据买的书目不同价格不同,其实每本书的价格都是一样的。

          在解决这个问题的时候,首先我没有很好的思路,于是我从买5本书开始算,在算的过程中我发现,当数目越来越大时,其实是可以直接用前面的结果的,类似于递归算法。特别是在10的前后,因为当本数足够大时,每5本享受的优惠最高,所以要看它其中包含的5有多少,但是不能把5全部用掉,因为那样只剩下余数,可以将最后一个5与余数组合,成为一个小于10的组合,这样根据前面算出的5、6、7、8、9的最优惠价格计算出总的最优惠价格。

          至于实现这个算法,可用输入的本数模5,结果加5,就与5、6、7、8、9这5种有关,根据它们的情况进行计算即可。

          在理清思路后编程的过程中我也出现了几个小的错误。其中有价格变量bookmon的类型问题,之前没有考虑就将之设置为整型int,在编译时发现并改正了这个问题。

  • 相关阅读:
    安装centos虚拟机
    关于区别广播域与冲突域
    网络七层架构
    怎么有效避免黑客使用跳板软件进行攻击窃取信息数据
    C语言猜数字游戏
    页置换算法FIFO、LRU、OPT
    Samza的ApplicationMaster
    Samza文档翻译 : Comparison Introduction
    Samza文档翻译 : Architecture
    Samza文档翻译 : Concepts
  • 原文地址:https://www.cnblogs.com/huyabaoboke/p/4425929.html
Copyright © 2020-2023  润新知