我正在寻找一种算法,以最灵活的方式计算:
我正在进行成本计算,并正在寻找一个优雅的解决方案来解决以下问题:
单位(U)可以是任意数字。
可以有无限数量的阈值(t),但它们都与定价(p)相关,即:
电话:[10200152712]
电话:[5,4,3,1,10]
低于10欧元的价格为5欧元,
10-200之间的任何单位成本为4欧元,
200-1500之间的任何单位成本为3欧元,
1500-2712之间的任何单位成本为1欧元,
任何超过2712欧元的东西都要10欧元
所以一个1600的单位要花费:
50(单位从0到10)+760(单位从10到200)+3900(单位从200到1500)+100(剩余100个单位在1500以上)=4810欧元
什么是计算这个的好方法?
在记住任何值都是可变的的同时,所有阈值和相应的价格和单位都可以是任何时间的任何值。(价格总是与门槛相关的唯一固定因素)
我尝试用嵌套的I/OR语句来做事情,但是它完全混乱,而且不灵活,因为阈值也可以超过4个值。

最佳答案

var T = [10, 200, 1500, 2712];
var P = [5, 4, 3, 1, 10];
function calculate(n){
    var i = 0;
    var current = 0;
    var cost = 0;
    while(n > 0 && i < T.length){
        var min = Math.min(T[i] - current, n);
        current += min;
        cost += P[i] * min;
        n -= min;
        i += 1;
    }
    if(n > 0){
        cost += P[i] * n;
    }
    return cost;
}

在这里,我将跟踪使用可变电流计算成本的单位最后,我检查是否有任何单位的成本尚未计算,我是乘以P的最后一个元素与剩余的单位,以获得总成本。

09-10 05:17
查看更多