中学时候都学过 排列组合 1 2 3 4 5 6可以组成720个不同的字符串
这里写了一个粗糙的实现方法 例为 1- 6
希望哪个高手可以指点一二 
$j=0;
for($i=123456;$i<=$number;$i++){
$box=array();$ge =$i%10;
if($ge>6 || $ge==0){
continue;
}
$box[]=$ge;
$shi = intval($i/10)%10;
if($shi>6 || $shi ==0){
continue;
}
$box[]=$shi;
$bai = intval($i/100)%10;
if($bai>6 || $bai ==0){
continue;
}
$box[]=$bai;
$qian = intval($i/1000)%10;
if($qian>6 || $qian ==0){
continue;
}
$box[]=$qian;
$wan = intval($i/10000)%10;
if($wan>6 || $wan ==0){
continue;
}
$box[]=$wan;
$shiwan = intval($i/100000);
if($shiwan>6 || $shiwan ==0){
continue;
}
$box[]=$shiwan;
//echo count(array_unique($box));
//echo '<br>';
//var_dump(array_unique($box));
//echo '<br>';
if(count(array_unique($box))!=6){
continue;
}if($j%10==0){
echo "<br />";
}
$j++;
echo ' ',$i,' ';
}
echo "<br />";
echo "一共{$j}个";

解决方案 »

  1.   

    $a = perm(array(1,2,3,4,5,6));
    echo count($a);
    //print_r($a);function perm($list, $k=0, $m=0) {     
      if(! $m) $m = count($list) - 1; 
      $r = array();    
      if($k >= $m) {          
        $r[] = join('', $list);         
      }else {         
        for($i = $k; $i <= $m; $i++) {             
          list($list[$k], $list[$i]) = array($list[$i], $list[$k]);
          $r = array_merge($r, perm($list, $k + 1, $m));             
          list($list[$k], $list[$i]) = array($list[$i], $list[$k]);
        }
      }
      return $r;
    }
    720
      

  2.   

    附:
    如果数字中有  0 ,且 0  不能做为开头,就  6! - 5!   = 600如果应该是要写算法。
    也是 六个数 
    第一个数可以6 选 1  ,第二个数,只能5选1 了,第三个是4选1 
    硬要我写出一算法,还是求阶乘。
    如果只是求 count 只用阶乘就可以了。除非是显示每种排列字符串~
     
      

  3.   

    可能是我说的不太清楚 求阶乘 没有难度 我的想法是 显示所有 排列组合形成的 字符串
    $j==720 是为了验证至少 执行次数是对的
    不限于 数字 也可以是 "a 你 他 b c # "
    我是借助数字 来实现的
      

  4.   

    #2 的代码去掉 //print_r($a); 的注释,就是你要的
    从数学理论到实际的运算,在计算机专业中称为“算法”
      

  5.   

    oh,输出全排例,网上找了一个。
         $a=array('1','2','3','4','5','6');
            $b=array();
            $range=$this->wholerange($a,$b,$a);
            $count=recursionarray($range);
            echo "总共有".$count."排列";  function wholerange($a,$b,$M){
            $range=array();
            if(count($a) > 1){
                $d=$b;
                foreach($a as $value){
                    $b[]=$value;
                    $c=array_diff($M,$b);
                    if(count($c) > 0){
                        $range[]= $this->wholerange($c,$b,$M);
                    }
                    $b=$d;
                }
            }elseif(count($a) == 1){
                foreach($a as $value){
                    $b[]=$value;
                }
                $onerange="";
                foreach($b as $value){
                    $onerange.=$value;
                }
                $range[]=$onerange;
            }
            return $range;
        }
     function recursionarray($arr){
            $i=0;
            foreach($arr as $value){
                if(is_array($value)){
                    $i+= recursionarray($value);
                }else{
                    echo $value."<br/>";
                    $i++;
                }
            }
            return $i;
        }