(1)按照特定的条件随机生成新的序列:
使用一个循环,每次生成一个随即数(此数为数组索引项),记录这个数
然后,把原数组中的这个记录删除
<?

$str='01,03,04,08,10,23,31,18,01,04,07,11,17,26,35,14,02,09,15,25,26,31,35,18,06,07,23,24,27,30,34,10,02,04,08,12,23,28,32,35,06,07,08,16,18,32,34,29,01,03,21,23,24,27,35,15,07,11,16,17,24,27,29,22,05,07,14,17,20,26,29,13,03,06,10,25,28,29,31,07,01,05,10,13,14,27,28,17,02,08,09,15,16,27,29,03,06,08,09,10,29,31,35,26,04,14,17,19,22,24,30,34,01,06,07,13,17,21,24,16,03,11,12,19,20,22,30,07,05,06,09,16,17,19,32,35,06,10,17,23,25,34,35,27,02,03,15,17,21,23,31,11,03,04,16,28,32,34,35,33,05,15,18,27,29,32,33,34,04,07,09,15,21,24,27,14,15,17,22,23,24,33,35,02,01,02,06,15,16,31,34,21,01,02,06,10,12,19,25,26,13,16,20,23,25,26,33,30,04,09,17,19,22,24,35,29,07,17,18,19,23,28,32,15,05,06,07,22,25,26,30,03,04,06,09,13,24,31,35,25,02,04,06,11,23,24,32,14,02,06,15,20,26,32,35,23,04,05,07,15,17,19,28,12,03,17,18,20,22,31,35,05,01,04,05,07,09,17,24,21,06,07,09,18,20,22,28,19,11,12,21,23,26,30,34,19,06,09,16,23,31,33,34,22,03,08,09,13,29,31,35,24,02,13,14,23,32,34,35,33,12,13,17,19,29,30,32,35,01,07,08,09,22,31,35,02,05,07,13,14,15,19,23,30';
$a=explode(",",$str);//得到数组a

$i=0;
while(isset($a[$i])){
$i++;
}
$length=$i;//取得数组的长度

$max=$length;
for($j=0;$j<$length;$j++){
srand((double)microtime()*1000000);
$max--;
$randval = rand(0,$max);
//echo $randval.'<br>';
//echo $max.'<br>';
$b[$j]=$a[$randval];//随即生成的新的数组
$a=A($a,$randval);
}
for($j=0;$j<$length;$j++)//显示输出新的数组
echo $b[$j]."<br>"; function A($a,$pos){
         //从第$pos个数开始,向前覆盖,这样,原数组$a[$pos]将不存在
$i=0;
while(isset($a[$i])){
$i++;
}
$a[$i]='';
$length=$i;
for($i=$pos;$i<$length;$i++)
$a[$i]=$a[$i+1];
return $a;
}
?>

解决方案 »

  1.   

    (2)列出出现次数最多的4个数字:
    把数组的值作为另一数组的索引项,其值为原数组以这个索引项为值的个数
    如:$b[17]=5;表示17在原数组中有5个
    //此时,数组a已不存在,故用数组b
    $max_value=$b[0];//得到最大值 
    for($i=1;$i<$length;$i++)
    if($b[$i]>$max_value)
    $max_value=$b[$i];

    for($i=0;$i<$length;$i++){
    $p=$b[$i];
    if($p=="01")$count[1]=0;
    if($p=="02")$count[2]=0;
    if($p=="03")$count[3]=0;
    if($p=="04")$count[4]=0;
    if($p=="05")$count[5]=0;
    if($p=="06")$count[6]=0;
    if($p=="07")$count[7]=0;
    if($p=="08")$count[8]=0;
    if($p=="09")$count[9]=0;
    $count[$p]=0;
    }
    //echo $count[8];
    for($j=1;$j<=$max_value;$j++)
    echo $count[$j]."<br>";
    for($i=0;$i<$length;$i++){
    $p=$b[$i];
    if($p=="01")$count[1]++;
    if($p=="02")$count[2]++;
    if($p=="03")$count[3]++;
    if($p=="04")$count[4]++;
    if($p=="05")$count[5]++;
    if($p=="06")$count[6]++;
    if($p=="07")$count[7]++;
    if($p=="08")$count[8]++;
    if($p=="09")$count[9]++;
    $count[$p]++;
    }
    //以下代码写四次,就可以可到最多,次多等等
             //当然,输出的时候,还要做一些改进,因为把01改成了1,02改成了2等
    $bb=1;//至少出现一次 
    for($i=1;$i<=$max_value;$i++)
    if($count[$i]>$bb){
    $bb=$count[$i];
    $count[$i]=0;
    }