问个算法问题? 举例:$arr_begin=array("4","12","27","21","33","10","18","04"); 数组内所有数字相加可以得到多少种答案?4+124+27...4+12+27 .....4+12+27+21+33+10+18+04大家有什么好的方法没? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有什么意义呢。$arr_begin=array("4","12","27","21","33","10","18","04"); $str = join("+",$arr_begin);eval("echo $str;"); //输出129 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))); 组合算法,不过这样算法复杂度相当高………………$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; } }}================== //递归$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));} php 正则匹配的问题 php新手问一个php数据转发的问题 绮梦旅程 超级群 招揽爱亲 拥有美好的梦想者进来哈~ 请教一小段ASP怎么改PHP,万分感谢 一个用php解码javascript编码的url的问题 寻求PHP高手合作 问题是:我如何得到这个内容?(访问一个网址时,发出的请求头中包含有内容) 帮忙推荐一个比较好的PHP虚拟主机 用类的经验丰富的朋友请进 php不能连接mysql,但不是防火墙的问题,会是什么原因呢?在线等待 关于一个preg_replace 正则表达式 替换的问题 PHP函数定义问题,在使用之前好还是之后,或者无所谓?
有什么意义呢。$arr_begin=array("4","12","27","21","33","10","18","04");
$str = join("+",$arr_begin);
eval("echo $str;"); //输出129
{
$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)));
$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;
}
}
}==================
//递归
$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));
}