• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

概率不等的随机数生成的一点思路

php 搞代码 3年前 (2022-01-22) 27次浏览 已收录 0个评论

题目:产生0-9中的随机数,要求0到9出现的概率依次递减,

一般思路,把10个0,9个1,8个2…..2个8,1个9放到数组中,然后随机生成数组下标,按下标取出数字.

二般思路:生成两个0-9的随机数,取小的那个,这个思路(手链魔咒提出)说实际的不知道是什么原理,但是实验证明,确实能达到效果.

验证方法:

程序代码

<?php

function fun(){

$num = rand(0,9); //10以内的数字平均分配

$num2 = rand(0,9);

($num2<=$num) ? $return.=$num2 : $return.=$num;

return $return;

}

function totalStr($haystack, $needle,$i = 0){//检验字串中某个字符出现的次数

while(strpos($haystack,$needle) !== false) {

$haystack = substr($haystack, (strpos($haystack,$needle) + 1));

$i++;

}

本文#来源gaodai.ma#com搞##代!^码7网
搞代gaodaima码

return $i;

}

for ($i=0;$i<=1000;$i++){

$str .= fun();

}

for ($i=0;$i<=9;$i++){

echo totalStr($str,"$i")."\n"; //0-9出现的次数

}

?>

写下这片后不久,手链魔咒有优化了算法

具体见下:

程序代码

function getRand($min,$max) {

$num=rand($min,$max);

return rand($min,$num);

}

还有另一位高人写的一个函数,数学思想比较强,不太好理解

程序代码

function getRandomByFactor($max,$factor=2){

$c = rand(0,pow($max,$factor));

return $max – ceil(pow($c,1/$factor));

}


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:概率不等的随机数生成的一点思路

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址