1 回答

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊
function f($n, $arr) { //$n是目標(biāo)數(shù)字,$arr是數(shù)字組成的數(shù)組
if (empty($arr)) return false; //如果數(shù)組沒(méi)有元素,返回
if (in_array($n, $arr)) return [$n];//如果期望的值已經(jīng)存在,直接返回這個(gè)值
foreach($arr as $k => $v) { //遍歷數(shù)組
if ($v > $n) continue; //比指定數(shù)還大,過(guò)
$copy = $arr; //復(fù)制數(shù)組
unset($copy[$k]); //去掉復(fù)制數(shù)組中已經(jīng)被選中的數(shù)字
$next = f($n - $v, $copy); //遞歸計(jì)算
if(! empty($next)) return array_merge([$v], $next); //合并結(jié)果集
}
return false;//沒(méi)找到啊
}
$arr = [99.1, 92.2, 60, 50, 49.5, 45.7, 25.1, 20, 7.4, 13, 10, 7, 2.1, 2, 1];
$data = f(100, $arr);
print_r($data);//Array ( [0] => 60 [1] => 20 [2] => 13 [3] => 7 )
$data = f(105, $arr);
print_r($data);//Array ( [0] => 60 [1] => 20 [2] => 13 [3] => 10 [4] => 2 )
添加回答
舉報(bào)