php每日随机题目,四脚猫每日一题-PHP随机练习算法

/*

* 作者:Zjmainstay

* 1-9999取365个随机,尽可能平衡取值

* @author Zjmainstay

* @website http://zjmainstay.cn

*

*/

$arr = range(1, 9999);

$randNum = 365;

$randArr = array();

//1 && 9999

$minNum = array_shift($arr);

$maxNum = array_pop($arr);

$randArr[$minNum] = true;

$randArr[$maxNum] = true;

//反转,数值做key

$arr = array_flip($arr);

//平衡

$avg = 2;

$halfBase = count($arr) / $avg;

//剩余个数取出

for($i = count($randArr); $i < $randNum; $i++) {

$rand = rand(1, $halfBase);

if($i % $avg == 0) {

$rand += $halfBase;

}

//碰撞,分支从左到右取不碰撞的第一个

if(isset($randArr[$rand])) {

if($rand < $halfBase) { //左支

for($j = $minNum; $j < $halfBase; $j++) {

if(!isset($randArr[$j])) {

$rand = $j;

unset($randArr[$j]); //Delete it

break; //Got it and break

}

}

} else { //右支

for($j = $halfBase; $j < $maxNum; $j++) {

if(!isset($randArr[$j])) {

$rand = $j;

unset($randArr[$j]); //Delete it

break; //Got it and break

}

}

}

}

$randArr[$rand] = true;

}

//取出随机数并排序

$randArr = array_keys($randArr);

sort($randArr);

echo '

';

print_r($randArr);

//End_php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值