怎么样从一组数字中按条件随机生成序列

gotoparty 2006-06-03 02:11:33
数组如下:
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

希望可以按照特定的条件随机生成新的序列。
比如说,列出出现次数最多的4个数字。
列出出现次数最少的4个数字
或随机显示4个不重复数字

急用,请高手帮助
...全文
292 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hbuxiaoshe 2006-06-04
  • 打赏
  • 举报
回复
(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;
}
hbuxiaoshe 2006-06-04
  • 打赏
  • 举报
回复
(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;
}
?>

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧