java 实现计费算法

发布于 2022-09-11 17:22:01 字数 495 浏览 12 评论 0

clipboard.png

如图所示,得到停车的费用,不考虑节假日,每天每秒都收费。
注意点:

  1. 收费时段是24小时,白天结束时间21点一定是挨着夜间开始时间21点的
  2. 其中变量是 白天开始时间,白天结束时间,夜间开始时间,夜间结束时间,白天计费标准N元/半小时,夜间按次收费N元/次
  3. 超过1毫秒都收费,无免费时间

例如: 某车从早上7点停到第二天9点,停车费用: 4 + (21-8)*8 + 4 + (9-8)*8

本人算法薄弱,只想到递归 8-21-8-21 看停车结束时间如果大于下一个结束点(如果开始是8 下个结束点是 21) 则结束时间取下一个结束点(21),计算其范围内的费用,递归下去,直到停车结束时间小于小一个结束点,取结束时间,算出费用,停止递归。

希望大家能给点意见,不尽感激。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

酒与心事 2022-09-18 17:22:01
  1. total初值为0
  2. 如果开始时间在8点前,total+4,然后将开始时间设置为8点整
    如果开始时间在21点后,total+4,然后将开始时间设置为第二天的8点整
  3. 如果结束时间小于等于开始时间,返回。否则执行后面的判断
  4. 计算结束时间与开始时间相差的整数天数,乘以每天的费用,加到total上,然后将开始时间设置为 开始时间+整数天数
  5. 如果结束时间在8点前或21点后,total+4+(21-8)*8
    否则,total+向上取整【(结束时间*2-16)】*4

所有将 开始时间结束时间 做比较的操作都需要考虑日期,不能只考虑小时时间。比如第二天的任何时间要晚于前一天的任何时间。

第2步的目的是规范化开始时间,方便后面的计算。

这里计算一整天(8点~第2天8点)的费用应以108来计算,而不是112:(21-8)*8+4=108,因为夜间21点到第2天8点只能算一次停车,因此费用是4元。


举几个例子吧,就当是顺便测试一下算法了:

  1. 开始时间=5点,结束时间=7点(同一天):

     (1) total=0
     (2) 因为开始时间在8点前,因此total=4,开始时间设置为8点整
     (3) 此时结束时间比开始时间早,因此直接返回total=4
  2. 开始时间=22点,结束时间为第二天8点整:

     (1) total=0
     (2) 开始时间在21点后,因此total=4,然后开始时间=第二天8点
     (3) 此时结束时间与开始时间相等,因此直接返回total=4
  3. 开始时间=7点,结束时间为第二天9点(你的例子):

     (1) total=0
     (2) total=4,开始时间设置为8点
     (3) 跳过
     (4) 整数天数为1天,total=4+108=112,开始时间变为了第2天8点
     (5) 结束时间9点,total=112+(9*2-16)*4=112+8=120
  4. 开始时间=7点,结束时间为第二天22点:

     (1) total=0
     (2) total=4,开始时间设置为8点
     (3) 跳过
     (4) 整数天数为1天,total=4+108=112,开始时间变为了第2天8点
     (5) 结束时间大于21点,total=112+4+(21-8)*8=220
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文