多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
``` function maopao($arr){ $count = count($arr); if ($count<2){ return $arr; } $flag = true; //flag 做一个标记 ,当flag=true 说明进行了元素交换,默认是true for($i=0;$i<$count && $flag;$i++){ //如果为flag = false 则说明没有交换,直接停止循环, //在没加flag之前,即使有序,也会输出N个1-- //echo "1--".PHP_EOL; $flag = false; for($j=0;$j<$count-1-$i;$j++){ if($arr[$j] > $arr[$j+1]){ //echo "2--".PHP_EOL; list($arr[$j],$arr[$j+1]) = [$arr[$j+1],$arr[$j]]; $flag = true; } } } return $arr; } /* $arr : 正整数数组 M $start : 开始的位置 从0开始 $count : 初始值为任意取出的元素的个数N,每一次递归count会减一,用于计算每个数的最后一位索引号和判断递归是否继续 $Num : 为常数,值是任意取出的元素的个数N $res : 记录索引号 $s : 和S $min : 最小乘积 */ function arrayN($arr,$start,$count,$Num,$res,$s,&$min){ for($i=$start;$i<count($arr)-$count+1;$i++){ //记录索引号 $res[$count-1]=$i; if($count-1==0){ $oneResult=[]; for($j=$Num-1;$j>=0;$j--){ array_push($oneResult,$arr[$res[$j]]); //记录当前的组合 } if(array_sum($oneResult) == $s){ //当前组合求和 与 和S 做笔记啊ddddddd $min = $min == 0 ? array_product($oneResult) : ($min > array_product($oneResult)? array_product($oneResult) : $min); } }else{ arrayN($arr,$i+1,$count-1,$Num,$res,$s,$min); } } } ```