Php 执行支架率计算的算法 让我们考虑一个括号内的关税,每个服务有三个(或更多)括号[或类?我不确定正确的英语短语]。
例如,停车场对不同车辆收费,如果车辆长度小于4米,则按以下方式收费:Php 执行支架率计算的算法 让我们考虑一个括号内的关税,每个服务有三个(或更多)括号[或类?我不确定正确的英语短语]。,php,algorithm,multidimensional-array,data-structures,Php,Algorithm,Multidimensional Array,Data Structures,例如,停车场对不同车辆收费,如果车辆长度小于4米,则按以下方式收费: 前两天免费(或一次性10美元),然后 未来3天:每天5美元 未来4天:每天8美元 未来2天:每天10美元 后天:每天15美元 所以如果我呆8天,我会付2*0+3*5+3*8=36美元 我最初的逻辑是: 那就取消自由日吧 对于每个括号:检查是否还有天数,如果天数超过当前括号跨度,求和最大金额并继续,否则仅求和剩余金额 我的问题是:这种逻辑是否可以改进?(是否有更智能的算法) 什么样的数据结构能够以我在执行算法时可以行走的方式
- 前两天免费(或一次性10美元),然后
- 未来3天:每天5美元
- 未来4天:每天8美元
- 未来2天:每天10美元
- 后天:每天15美元
正如问题的标记所暗示的,我正在使用PHP实现。只需将括号中的天数和费率作为键/值对放入一个数组中,然后循环计算汽车停放的天数
$brackets=array(0=>0,2=>5,5=>8,9=>10,11=>15); // At 0 days rate is 0, from day 2 rate is $5 per day etc
$days = 8;
$total = 0;
for ($i = 0; $i < $days; ++$i) { // Loop over each day
if (isset($brackets[$i])) {
$rate = $brackets[$i]; // Set new rate if applicable
}
$total = $total + $rate; // Add daily rate to total
}
echo 'Total is $'.$total;
$方括号=数组(0=>0,2=>5,5=>8,9=>10,11=>15);//在0天时,费率为0,从第2天起,费率为每天5美元等
$days=8;
$total=0;
对于($i=0;$i<$days;++$i){//每天循环一次
如果(isset($括号[$i])){
$rate=$方括号[$i];//如果适用,设置新的费率
}
$total=$total+$rate;//将每日费率添加到总计
}
echo“总计为$”。$Total;
您可以像项目符号列表中所描述的那样对括号进行编码,使用成对的[下一个”天数,这些天数的成本]。然后您最多需要与不同括号的数量相等的迭代次数。因此,即使一辆车停了200天,循环也只会迭代5次:
$brackets = [[2, 0], [3, 5] , [4, 8], [2, 10], [PHP_INT_MAX, 15]];
$days = 8;
$total = 0;
foreach ($brackets as list($nextDays, $dayFee)) {
$total += min($nextDays, $days) * $dayFee;
$days -= $nextDays;
if ($days <= 0) break;
}
echo "Total is \$$total\n";
$方括号=[[2,0]、[3,5]、[4,8]、[2,10]、[PHP_INT_MAX,15];
$days=8;
$total=0;
foreach($括号为列表($nextDays,$dayFee)){
$total+=min($nextDays,$days)*$dayFee;
$days-=$nextDays;
如果($days)很好,很简单!我按照你的建议做了一个测试数组,它很简单,我想知道我是否想得太多了:D明天我尝试完整的解决方案,如果我接受答案。。。