问个算法问题?

jaxio 2011-01-11 11:01:07
举例:

$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

大家有什么好的方法没?
...全文
241 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jaxio 2011-01-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 default7 的回复:]
引用楼主 jaxio 的回复:
举例:

$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

大家有什么好的方法没?


有什么意义呢。



……
[/Quote]

多谢分享,不过你的方法只是得出一个答案,基于你这种思想。有料
  • 打赏
  • 举报
回复
[Quote=引用楼主 jaxio 的回复:]
举例:

$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

大家有什么好的方法没?
[/Quote]

有什么意义呢。



$arr_begin=array("4","12","27","21","33","10","18","04");
$str = join("+",$arr_begin);
eval("echo $str;"); //输出129
networkwx 2011-01-12
  • 打赏
  • 举报
回复
循环一个一个加。。。
ihefe 2011-01-12
  • 打赏
  • 举报
回复

//递归
$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));
}

amani11 2011-01-12
  • 打赏
  • 举报
回复
组合算法,不过这样算法复杂度相当高………………

$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;
}
}
}



==================
xuzuning 2011-01-12
  • 打赏
  • 举报
回复
不就是组合吗?
fxs_2008 2011-01-12
  • 打赏
  • 举报
回复
有点麻烦
skyaspnet 2011-01-12
  • 打赏
  • 举报
回复
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)));

老骥伏枥 2011-01-11
  • 打赏
  • 举报
回复
这用到高中数学知识了吧?队列组合什么的?

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧