如何按百分比控制概率 有三个数:1,2,3如果控制出现1的概率为2%,2的概率为20%,3的概率为78% 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 $num=rand(0,100);if($num>0 and $num<2){return 1}elseif($num>20 and $num<78){return 2}elseif($num>78){return 3} 借楼问一句,php的rand随机出来是均匀分布的么? #1的不错,不过应该是rand(1,100)吧 给你一个phpchina论坛上的例子吧:<?php/**+------------------------------------------------------------------------------* 根据概率进行字母抽奖程序-程序说明+------------------------------------------------------------------------------* @author horseluke http://www.phpchina.com/bbs/thread-104235-1-1.html* @version 0.0.1 Build 20090210-2215 BUG FIX1* @abstract 该程序主要演示随机抽取1——100中的任意一个整数,并且依据设置的概率得出其对应的字母号码。+------------------------------------------------------------------------------*//**+------------------------------------------------------------------------------* 根据概率进行字母抽奖程序-程序设置区。设置方法: $a['幸运字母']=整数概率(取值应在1——100之内);* 可添加多个"$a['幸运字母']=整数概率",但要注意所有字母的概率总数为100。程序会自动检查。+------------------------------------------------------------------------------*/$a['A']=10;$a['B']=20;$a['C']=30;$a['D']=40;/**+------------------------------------------------------------------------------* 根据概率进行字母抽奖程序-程序运行区。请勿修改!+------------------------------------------------------------------------------*/$b_keynum=1;$b[0]=0;$a_key[0]='start';$total_probability=0;$total_probability_old=0;//以下代码主要用于对1——100进行分段、提取抽奖字母并与特定分段相关联,然后显示出来。foreach ($a as $key => $value){ if ($total_probability==0){ $total_probability_old=1; }else{ $total_probability_old=$total_probability+1; } $total_probability = $total_probability + $value; //进行各分段的概率相加 $b[]=$total_probability; //该分段结束时候的数值 $a_key[]=$key; //该分段所对应的字母 $b_keynum++; //分段数 echo '幸运号码处在['.$total_probability_old.','.$total_probability.']这个区间的,幸运字母是:'.$key.'。<br />';}if($total_probability <> 100){ //检验总概率是否确实为100%。原理上来说用array_sum($a)也可以,但是前面都计算了$total_probability,所以...... echo '概率相加非100%,无法运行。程序即将退出......'; exit;}echo '<br /><br />-----下面进入抽奖时间------<br />';$luckynum=mt_rand(1,100); //注意,不是(0,100)这样就会变成1/101概率。echo '你抽到的幸运号码是:'.$luckynum.'。';//分段循环比较。for ($k=0;$k<$b_keynum;$k++){ $ki=$k+1; if ( (($luckynum - $b[$k] >= 0 ) &&($luckynum - $b[$ki] <0)) || ($luckynum == $b[$ki]) ){ echo '因此,你抽到的幸运字母是:'.$a_key[$ki]; exit; }}?> 当然有规律了,不管是伪随机(PHP的rand应该是属于这种)还是随机,都是有分布规律的。多数伪随机都是出均匀分布的,其他分布都是要靠自己转的。 中文字符串对比,含有标点符号, 有軟件可以將留言將發佈在多個網站上嗎? php生成xml时,如何创建非闭合元素节点? 一个人做了N久!终于上线了,来啊,散分了!!!! 大家快来帮我看看这是怎么回事 query的问题! phplib双列排序问题 请问关于正则表达式 我的一个数据库查询语句,请朋友们看看是不是有错。 初学者的一个邮箱地址的正则问题! php smarty 疑问 php 调用 c++程序
if($num>0 and $num<2){return 1
}elseif($num>20 and $num<78){return 2}else
if($num>78){return 3}
多数伪随机都是出均匀分布的,其他分布都是要靠自己转的。