PHP

这个用php算法该怎么做?

发布于 2019-10-07

有个长度为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);
?>

查看更多

1 个回答
kiss2044
kiss2044 2019-10-25
还没有介绍自己!

用循环配合六面体的回答方式,在开始时用字符串定义起始,然后每次都要去掉重复!

<?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);
?>

撰写答案

请登录后再发布答案,点击登录

夜间
模式

夜间模式

页面皮肤

分享
好友

手机
浏览

扫码手机浏览