为了账号安全,请及时绑定邮箱和手机立即绑定

给定一个值,如100,给定一个数组,从数组中挑选出N个元素,这N个元素相加也是100

给定一个值,如100,给定一个数组,从数组中挑选出N个元素,这N个元素相加也是100

三国纷争 2018-08-07 10:10:31
如数组:var arr = [99.1, 92.2, 60, 50,           49.5, 45.7, 25.1, 20,             17.4, 13, 10, 7, 2.1, 2, 1];找到和为100的数组元素:[60,20,10,7,2,1]
查看完整描述

1 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

function f($n, $arr) { //$n是目标数字,$arr是数字组成的数组

    if (empty($arr)) return false; //如果数组没有元素,返回

    if (in_array($n, $arr)) return [$n];//如果期望的值已经存在,直接返回这个值

    foreach($arr as $k => $v) { //遍历数组

        if ($v > $n) continue; //比指定数还大,过

        $copy = $arr; //复制数组

        unset($copy[$k]); //去掉复制数组中已经被选中的数字

        $next = f($n - $v, $copy); //递归计算

        if(! empty($next)) return array_merge([$v], $next); //合并结果集

    }

    return false;//没找到啊

}

$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 ) 


查看完整回答
反对 回复 2018-09-17
  • 1 回答
  • 0 关注
  • 994 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信