举例:$arr_begin=array("4","12","27","21","33","10","18","04");  数组内所有数字相加可以得到多少种答案?
4+12
4+27
...
4+12+27 .....4+12+27+21+33+10+18+04大家有什么好的方法没?  

解决方案 »

  1.   


    有什么意义呢。$arr_begin=array("4","12","27","21","33","10","18","04");   
    $str = join("+",$arr_begin);
    eval("echo $str;"); //输出129
      

  2.   

    php数组的排列组合给你个数字数组,打印出所有可能的排列组合。就是假如有数组[1,2],答案是打印出12和21。其中数组的元素是0--9,且不重复。    解法一:function func($first = '', $arr, &$results = array())
    {
            $len = count($arr);
            if($len == 1) {
                    $results[] = $first . $arr[0];
            } else {
                    for($i=0; $i<$len; $i++) {
                            $tmp = $arr[0];
                            $arr[0] = $arr[$i];
                            $arr[$i] = $tmp;
                            func($first.$arr[0], array_slice($arr, 1), $results);
                    }
            }
    }
    $arr = range(1, 5);
    $results = array();
    func('', $arr, &$results);
    print_r($results);     解法二:function run($List)
    {
            if($List==null) return array("");
            foreach($List as $Header){
              foreach(run(mm($List,$Header)) as $Temp){        
               $s[]=(is_array($Temp))?array_merge(array($Header),$Temp):(($Temp!='')?array($Header,$Temp):$Header);
        }
       }
            return $s;
    }//删除数组中的某元素function mm($a1,$a2)
    {
            unset($a1[array_search($a2,$a1)]);
            return $a1;
    }
    print_r(run(array(1,2,3,4,5)));
      

  3.   

    组合算法,不过这样算法复杂度相当高………………$arr_begin=array("1","3","5","7");
    $sum = array_sum($arr_begin);
    $res[$sum] = 1;
    self_func($arr_begin, $sum);
    print_r(array_keys($res));
    function self_func($arr, $sum)
    {
    if(is_array($arr) && count($arr) >= 3)
    {
    foreach($arr AS $k => $v)
    {
    $t = $sum-$v;
    $GLOBALS['res'][$t] = 1;
    unset($arr[$k]);
    self_func($arr, $t);
    $arr[$k] = $v;
    }
    }
    }==================
      

  4.   


    //递归
    $arr_begin=array("4","12","27","21","33","10","18","04");   sum($arr_begin,count($arr_begin));
    function sum($arr_begin,$num){
    if($num==0)return;
    $j=-1;
    foreach ($arr_begin as $v)
    {
    $j++;
    if($j!=0){
    $a+=$arr_begin[$j];
    echo $a;
    echo "<br/>";
    }else{
    $a=$arr_begin[$j];
    }
    }
            echo "<hr/>";
    unset($arr_begin[0]);
    $arr_begin=array_values($arr_begin);
            sum($arr_begin,count($arr_begin));
    }