有个长度为11位的数字,乱取其中连续四位数字,可组成8个四位数字,怎么根据8个四位数字(位置顺序被打乱的情况下)反推出原始11位数字的算法?
例如9123、1234、2345、3456、4567、5678、6789、7890对应的原始数据为“91234567890” 实际情况是这8个四位数是打乱顺序的,要不容易看出数字的规律!
<?php
$rand = rand(10000000000,99999999999);
echo $rand;
$strarray = str_split($rand);
$array = [];
for ($i=0;$i<=7;$i++) {
$array[]=$strarray[$i].$strarray[$i+1].$strarray[$i+2].$strarray[$i+3];
}
echo('<br>');
shuffle($array);
print_r($array);
echo('<br>');
function getres($res,$array,$resoutarray) {
$ntres = $res;
$zjarray = $array;
foreach ($zjarray as $key => $value) {
$resarray = str_split($ntres);
$count = count($resarray);
$newarray = str_split($value);
if($resarray[0]==$newarray[1]&&$resarray[1]==$newarray[2]&&$resarray[2]==$newarray[3]) {
$newres = $newarray[0].$ntres;
$zjarray1 = $zjarray;
unset($zjarray1[$key]);
if(count($zjarray1)!=0) {
$resoutarray = getres($newres,$zjarray1,$resoutarray);
} elseif (strlen($newres)==11) {
$resoutarray[]=$newres;
}
}
if($resarray[$count-1]==$newarray[2]&&$resarray[$count-2]==$newarray[1]&&$resarray[$count-3]==$newarray[0]) {
$newres = $ntres.$newarray[3];
$zjarray1 = $zjarray;
unset($zjarray1[$key]);
if(count($zjarray1)!=0) {
$resoutarray = getres($newres,$zjarray1,$resoutarray);
} elseif (strlen($newres)==11) {
$resoutarray[]=$newres;
}
}
}
return array_unique($resoutarray);
}
$resoutarray=[];
foreach($array as $key =>$value) {
$zjarray = $array;
unset($zjarray[$key]);
$resoutarray = array_unique(array_merge(getres($value,$zjarray,$resoutarray),$resoutarray));
}
$resoutarray = array_unique($resoutarray);
print_r($resoutarray);
?>
用循环配合六面体的回答方式,在开始时用字符串定义起始,然后每次都要去掉重复!
<?php
$rand = rand(10000000000,99999999999);
echo $rand;
$strarray = str_split($rand);
$array = [];
for ($i=0;$i<=7;$i++) {
$array[]=$strarray[$i].$strarray[$i+1].$strarray[$i+2].$strarray[$i+3];
}
echo('<br>');
shuffle($array);
print_r($array);
echo('<br>');
function getres($res,$array,$resoutarray) {
$ntres = $res;
$zjarray = $array;
foreach ($zjarray as $key => $value) {
$resarray = str_split($ntres);
$count = count($resarray);
$newarray = str_split($value);
if($resarray[0]==$newarray[1]&&$resarray[1]==$newarray[2]&&$resarray[2]==$newarray[3]) {
$newres = $newarray[0].$ntres;
$zjarray1 = $zjarray;
unset($zjarray1[$key]);
if(count($zjarray1)!=0) {
$resoutarray = getres($newres,$zjarray1,$resoutarray);
} elseif (strlen($newres)==11) {
$resoutarray[]=$newres;
}
}
if($resarray[$count-1]==$newarray[2]&&$resarray[$count-2]==$newarray[1]&&$resarray[$count-3]==$newarray[0]) {
$newres = $ntres.$newarray[3];
$zjarray1 = $zjarray;
unset($zjarray1[$key]);
if(count($zjarray1)!=0) {
$resoutarray = getres($newres,$zjarray1,$resoutarray);
} elseif (strlen($newres)==11) {
$resoutarray[]=$newres;
}
}
}
return array_unique($resoutarray);
}
$resoutarray=[];
foreach($array as $key =>$value) {
$zjarray = $array;
unset($zjarray[$key]);
$resoutarray = array_unique(array_merge(getres($value,$zjarray,$resoutarray),$resoutarray));
}
$resoutarray = array_unique($resoutarray);
print_r($resoutarray);
?>