Php 确定数组中值的最大部分以匹配给定值
我有一个包含值的数组:Php 确定数组中值的最大部分以匹配给定值,php,arrays,math,Php,Arrays,Math,我有一个包含值的数组: $values = array( 2, 4, 7.5, 9 ); 我有一个单独的值: $total = 12; 从$values中选择值的正确数学方法是什么,较大的值排在第一位,较小的值排在最后,直到达到或接近$total的值,但从未超过 我知道这是一道基本的数学题,但我的数学能力相当差,我不知道如何完成这道题。有一个可行的解决方案给你 <?php $values = array( 2, 4
$values = array(
2,
4,
7.5,
9
);
我有一个单独的值:
$total = 12;
从$values
中选择值的正确数学方法是什么,较大的值排在第一位,较小的值排在最后,直到达到或接近$total
的值,但从未超过
我知道这是一道基本的数学题,但我的数学能力相当差,我不知道如何完成这道题。有一个可行的解决方案给你
<?php
$values = array(
2,
4,
1.5,
1,
3,
5
);
$total = 12;
rsort($values);
$newarray = array();
foreach($values as $key)
{
if(array_sum($newarray) == $total)
{
array_pop($newarray);
break;
}
else if(array_sum($newarray) > $total)
{
break;
}
else
{
$newarray[] = $key;
}
}
?>
$newArray=array\u filter($numbers,function($value)use($minimum,$maximum){
return($value>=$minimum&&$value具有讽刺意味的是,我最终得到了一段相当紧凑的代码,它漂亮地解决了这个问题,并且证明了这不是每个sé的背包问题
$total = 7.9;
$values = array(2, 2.5, 5, 8);
$computed = 0;
rsort($values);
foreach($values as $val) {
if($val + $computed > $total)
continue;
$computed += $val;
}
就是这样。你要求的是解决背包问题,请参阅,例如,了解更多详细信息。可能重复感谢否决票。由于不知道任何关键字,我应该如何在成堆的数百万中找到这些解决方案。我将看看这是否正是我要寻找的。显然背包问题"这是一个夸张的版本,使事情变得过于复杂。如果答案中提供的解释对我有帮助,我本来就不需要问这个问题。我喜欢人们在没有调查的情况下进行判断。谢谢你,迪本。我必须调查一下,但它看起来不错。我在这段代码中看到的是,结果是rray值可能会超过$value
,但这很容易更改。我的坏消息是,我读错了。我认为可以使用相等的值,但我想这是一个小问题。相等,是的,但不超过。但仍然感谢添加:)
$numbers= array(2,4,
7.5,
9
);
$newArray = array_filter($numbers,function ($value) use($minimum ,$maximum ) {
return ($value >= $minimum && $value <= $maximum );
});
$total = 7.9;
$values = array(2, 2.5, 5, 8);
$computed = 0;
rsort($values);
foreach($values as $val) {
if($val + $computed > $total)
continue;
$computed += $val;
}