我正在寻找一种算法,以最灵活的方式计算:
我正在进行成本计算,并正在寻找一个优雅的解决方案来解决以下问题:
单位(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的最后一个元素与剩余的单位,以获得总成本。