问个算法问题? 举例:$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页面,如何防止用户通过wget获取该php的源码呢? 正则,去掉onclick 做一个网站的步骤? 调用类里面方法的问题 送分50 三天面试两家公司经历 我有个问题,在一个字符串里取值的 验证此变量是否为数组,这语句该如何写? 求一个算法,如何取得一个数组中不相同的元素?急着用 请教让php支持SQL Server都要做哪些必要的修改呀?我这么改对吗? 大家来看一看,我就竟能不能活下去 关于一个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));
}