PHP数组计算 如下数组$arr,求方法随机对数组的值相加,求和为指定值:如(690),输出:405+180+105=690

$arr=array(29,24.66,36.52,19.75,14.61,45,23.65,16.51,7.28,2.67,1.68,45,0.24,405,180,1... $arr = array(29,24.66,36.52,19.75,14.61,45,23.65,16.51,7.28,2.67,1.68,45,0.24,405,180,105);

求通过PHP,找出数组中1个或多个数值的和为 指定值的方法
计算上面数组中多个值的相加 ,如 29+24.66 24.66+105+0.24+1.68+2.67 .....直到找出和为690 式子
展开
 我来答
迷花石
2017-02-16 · 超过49用户采纳过TA的回答
知道小有建树答主
回答量:117
采纳率:0%
帮助的人:88.3万
展开全部
<?php

$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];

/**
 * 根据某个值对数组中的元素进行分组
 */
function getGroupBySum($arr, $sum) {
    $len = count($arr);
    $result = [];
    // for 1
    for($i = 0; $i < $len; $i++) {
        // for 2
        for($j = 1; $j < $len - $i; $j++) {
            $tmp = array_slice($arr, $i+1, $j);
            array_unshift($tmp, $arr[$i]);
            if(array_sum($tmp) == $sum) {
                $result[] = $tmp;
            }
        }
        //for 3
        for($k = $i + 1; $k < $len; $k++) {
            if(($arr[$i] + $arr[$k]) == $sum) {
                $result[] = [$arr[$i], $arr[$k]];
            }
        }
    }

    return $result;
}

print_r(getGroupBySum($arr, 10));

打印结果:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
        )

    [1] => Array
        (
            [0] => 1
            [1] => 9
        )

    [2] => Array
        (
            [0] => 2
            [1] => 8
        )

    [3] => Array
        (
            [0] => 3
            [1] => 7
        )

    [4] => Array
        (
            [0] => 4
            [1] => 6
        )

)

函数getGroupBySum的算法解释:

我只能解释到这里了,剩下的只可意会。

---------------------------2017/2/16/19:45--------------

下班回去的途中,仔细思考了一下,我上面的函数还没有找到 1、2、7与1、3、6等等,所以它是错的。

我对题目的理解是:数组中任意个元素的和等于某个值,把这些元素组合找出来。

如果没有理解错题意的话,我写不出来这种算法,组合太多了。

追问
昨天 我也是大概这样写的,  用第一个数加 后面的数,再用第2个数加后面的数 ,以此类推
但正如你所说的,这样的算法是有问题的....我再想想办法 。

谢谢!
百度网友f5d26fa
2017-02-16
知道答主
回答量:13
采纳率:0%
帮助的人:4.9万
展开全部
先随机取出数组里的元素组成一个新的数组,用新数组进行遍历相加即可。需要写代码吗?
追问
麻烦写下代码 吧,谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式