中学时候都学过 排列组合 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- 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}个";
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
如果数字中有 0 ,且 0 不能做为开头,就 6! - 5! = 600如果应该是要写算法。
也是 六个数
第一个数可以6 选 1 ,第二个数,只能5选1 了,第三个是4选1
硬要我写出一算法,还是求阶乘。
如果只是求 count 只用阶乘就可以了。除非是显示每种排列字符串~
$j==720 是为了验证至少 执行次数是对的
不限于 数字 也可以是 "a 你 他 b c # "
我是借助数字 来实现的
从数学理论到实际的运算,在计算机专业中称为“算法”
$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;
}