求阶梯型的服务费总和

在一次面试php开发工程师中我遇到这道题目,是笔试中最后一道题目

有一个服务平台,提供服务需要收取用户使用的服务费,但是服务费的收取跟订单数量是有个阶梯关系的,请根据以下这个收费标准计算一个指定订单数量的平台服务费总和,假如用户下了8个订单该用户需要支付多少服务费?
示列给定:

订单数 服务费
1-5 31
6-10 30
11-50 27
51-200 24
201-1000 18
1001-5000 15
5001-10000 12
>=10000 10

因为 5*31+3*30=155+90=245
所以,该用户需要支付245元人民币的服务费

当时的解题思路

我当时面试的时候也没有想到更好的方式,我的解题思路是将这个阶梯关系按照对应的解题价格生成一个大的数组,如果有8单就是计算数组下标0一直到7下标的数组元素的和来得到收取费用的,如果大于最大的阶梯的数量再另外判断计算下。如果有更好的解题思路,希望大家积极分享

目的

我想贡献这道题的原因是想通过大家的智慧找到更多的解决方法,从而也能够从中学习到新的解决思路。欢迎大家使用php代码写个算法实现下

阅读 680
评论 更新于 2019-02-14
    3 个回答

    应该和个税一样啊
    弄个 速算 扣除数 就行了。。。

    订单数  服务费  速算扣除单数[fc]  速算扣除数[fd]
    1-5        31                0              0
    6-10       30                5            155 = 5 * 31
    11-50      27               10            305 = 5 * 31 + 5 * 30
    51-200     24               50           1385 = 5 * 31 + 5 * 30 + 40 * 27

    所以 服务费 fee = (单数 - 对应的 速算扣除单数[fc]) * 对应的 服务费 + 速算扣除数[fd]

    评论 赞赏 2019-02-14

      这不是和上税一个思路嘛

      评论 赞赏 2019-02-14
        raledong
        • 2.5k

        设计这种数组有点浪费了吧。

        评论 赞赏 2019-02-14
          撰写回答

          登录后参与交流、获取后续更新提醒