【发布时间】:2016-04-17 20:56:01
【问题描述】:
我需要从给定的数组中计算出等于或大于 PHP 中给定数字的数字。示例:
要获取的数字:
6.85505196
要计算的数组:
3.11350000
4.38350000
4.04610000
3.99410000
2.86135817
0.50000000
只有正确的组合应该是:
3.99410000 + 2.86135817 = 6.85545817
有人可以帮助我吗?三个小时了,我要生气了!
更新:我终于完成了我的代码如下:
$arr = array(3.1135, 4.3835, 4.0461, 3.9941, 2.86135817, 0.5);
$fetch = 6.85505196;
$bestsum = get_fee($arr, $fetch);
print($bestsum);
function get_fee($arr, $fetch) {
$bestsum = 999999999;
$combo = array();
$result = array();
for ($i = 0; $i<count($arr); $i++) {
combinations($arr, $i+1, $combo);
}
foreach ($combo as $idx => $arr) {
$sum = 0;
foreach ($arr as $value) {
$result[$idx] += $value;
}
if ($result[$idx] >= $fetch && $result[$idx] < $bestsum) $bestsum = $result[$idx];
}
return $bestsum;
}
function combinations($arr, $level, &$combo, $curr = array()) {
for($j = 0; $j < count($arr); $j++) {
$new = array_merge($curr, array($arr[$j]));
if($level == 1) {
sort($new);
if (!in_array($new, $combo)) {
$combo[] = $new;
}
} else {
combinations($arr, $level - 1, $combo, $new);
}
}
}
【问题讨论】:
-
能否请您发布到目前为止您尝试过的代码。 MCVE 会改善您的问题(如果没有你们自己的代码,看起来您希望我们为您编写代码)。
-
为什么只有 3.99410000 + 2.86135817 = 6.85545817 是正确的。我看到“等于或大于给定数字”,所以上面的数组有很多合适的组合。
-
因为 6.85545817 是最接近的组合,因为有更高的组合可能没问题,但我需要最接近的组合。实际上,我可以编写一个最接近的数字,但离我的需要还很远。
-
你想要什么回来。两个数字?两个数字的索引?你提出的书面公式是什么?
标签: php