• 购书最低价


    /*
    题目:
    书店针对《哈利波特》系列书籍进行促销活动,一共5卷,
    用编号0、1、2、3、4表示,单独一卷售价8元, 
    具体折扣如下所示:
    本数                  折扣
    2                       5%
    3                       10%
    4                       20%
    5                       25%
    根据购买的卷数以及本数,会对应不同折扣规则情况。
    单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,
    则可以享受5%的折扣,另外一本卷一则不享受优惠。
    设计算法能够计算出读者购买一批书的最低价格。
    */
    /*
    设计思路:假设一本1元
    购买数量  购买方式及价格
    1                         1
    2                         2×(1-5%)=1.9    √
    3                         3×(1-10%)
    6            5×(1-25%)+1=4.75                √
                4×(1-20%)+2×(1-5%)=5.1
                3×(1-10%)×2=5.4
    7            5×(1-25%)+2×(1-5%)=5.65    √
                4×(1-20%)+3×(1-10%)=5.9
    8            5×(1-25%)+3×(1-10%)=6.45
                             4×(1-20%)×2=6.4√
    9            5×(1-25%)+4×(1-20%)=6.95    √
    10            5×(1-25%)×2=7.5                √
    由上述可以看出1-5本的时候就按折扣来就行
    在6-10本的时候,问题就出在8本上,其他的都是5+?的买法,只有8本的时候是4+4的买法
    购买数量dividend÷5=consult余remainder 购买方式5×(1-25%)×consult+remainder×(1-z)
    s  z
    0   100%
    1   0%
    2   5%
    3   10%
    4   20%
    5   25%
    8   20%   ×2
    */
    #include<iostream>
    #include<cmath>
    using namespace std;
    
    double Buy(int dividend)
    {
        double  sum, z;
        int consult, remainder;
        consult = dividend / 10;
        remainder = dividend % 10;
        if (remainder==8)          //如果余数为8,用这种办法计算
        {
            sum = (5 * (1 - 0.25) * ((double)consult * 2) + 4 * (1 - 0.2) * 2)*8;
        }
        else                       //如果余数是其他则用这种办法
        {
            consult = dividend / 5;
            remainder = dividend % 5;
            switch (remainder)
            {
            case 0:z = 1; break;
            case 1:z = 0; break;
            case 2:z = 0.05; break;
            case 3:z = 0.1; break;
            case 4:z = 0.2; break;
            }
            sum = (5 * (1 - 0.25)*(double)consult + (double)remainder*(1 - z))*8;
        }
        return sum;
    }
    
    void main()
    {
        int dividend;
        double  sum;
        while (1)
        {
            cout << "请输入购书数量:";
            cin >> dividend;
            sum = Buy(dividend);
            cout << "最低价格为:" << sum << endl;
        }
    }

      本题是针对购买的书肯定是1-5卷的倍数,然后再加1或1,2或1,2,3或1,2,3,4卷。如果是买10本相同卷呢?就不能使用这种算法。首先要看购买的种类,然后配齐几套,把剩下的尽量再配一起。

  • 相关阅读:
    测试开发进阶之路,2020 我们砥砺同行!
    【上海/北京/杭州】七牛云工程效率部直聘
    测试开发基础|一文搞定计算机网络(一)
    点点点工程师真的要被淘汰吗?
    电商性能测试实战 | JMeter 插件 Ultimate Thread Group 完成梯度递增场景的压测
    将H264与AAC打包Ipad可播放的TS流的总结
    Ubuntu阿里云搭建Mono.net环境
    利用正则表达式排除特定字符串
    你敢不敢不要让我这么忙
    离我而去的附录H
  • 原文地址:https://www.cnblogs.com/-beauTiFul/p/5564575.html
Copyright © 2020-2023  润新知