数组排列算法笔试题

php算法笔试题

有一二维数组

array(array(1,2,3,4,5,6,7,8,9),
      array(1,2,3,4,5,6,7,8,9),
      array(1,2,3,4,5,6,7,8,9),    
      array(1,2,3,4,5,6,7,8,9),    
      array(1,2,3,4,5,6,7,8,9),        
      )

每个数组取不同的5个数为组成1组 求问有多少种组合
数组[数组0]取出的值 != 数组[数组1]取出的值!= 数组[数组2]取出的值 != 数组[数组3]取出的值 != 数组[数组4]取出的值 组成一组;
为一组
这种
求解

阅读 2.5k
4 个回答
for ($i = 1; $i < 10; $i++) {
    for ($j = 1; $j < 10; $j++) {
        if ($i == $j) {
            continue;
        }
        for ($k = 1; $k < 10; $k++) {
            if ($i == $k || $j == $k) {
                continue;
            }
            for ($l = 1; $l < 10; $l++) {
                if ($i == $l || $j == $l || $k == $l) {
                    continue;
                }
                for ($m = 1; $m < 10; $m++) {
                    if ($i == $m || $j == $m || $k == $m || $l == $m) {
                        continue;
                    }
                    $arr[] = $i . $j . $k . $l . $m;
                }
            }
        }
    }
}

echo '<pre>';
var_dump($arr);die();


//方法二
//不过可以应对不同的数组参数,不过参数越多,性能就越糟糕
set_time_limit(0);
$arr =[
  [1,2,3,4,5,6,7,8,9],
  [1,2,3],
  [1,2,3,4,5,6,7,8,9],    
  [1,2,3,4,5,6,7,8,9],    
  [1,2,3,4,5,6,7,8,9], 
  [5,6,7,8,9],         
  
];


$count = count($arr);
//需求:$arr每个子数组取出一个1个不同的数,进行组合
$main = [];

    
for($i=0; $i<$count; $i++){
       $dep = $arr[$i];
       $sock = $main;
       $main = [];
       for ($j=0; $j <count($sock) ; $j++) { 
          $split = str_split($sock[$j]);
          for ($k=0; $k < count($dep); $k++) { 
            if(in_array($dep[$k], $split)){
              continue;

            }

            $number = $sock[$j].$dep[$k];
            if(!in_array($number, $main)){
                $main[]=$number;

            }
          }

       }
       $main = empty($main)?$dep:$main;
      

      
}

echo '<pre>';
var_dump($main);
die();
    

9×8×7×6×5 = 15120;应该是这样的吧

新手上路,请多包涵

98765

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题