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

巴扎黑
发布: 2016-11-29 10:23:01
原创
1782人浏览过

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

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

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

验证方法:

 程序代码

zuojiankuohaophpcn?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++;

     }

     return $i;

}

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

     $str .= fun();

boardmix博思白板
boardmix博思白板

boardmix博思白板,一个点燃团队协作和激发创意的空间,集aigc,一键PPT,思维导图,笔记文档多种创意表达能力于一体,将团队工作效率提升到新的层次。

boardmix博思白板 39
查看详情 boardmix博思白板

}

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

   }

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号