请问rand()函数结果值出现的比例问题
假设我们的rand()函数的范围是1到100现在我想让其中的一个数值(比如5)出现的概率为10%
请问应该怎么写
假设我们的rand()函数的范围是1到100现在我想让其中的一个数值(比如5)出现的概率为10%
请问应该怎么写
解决方案 »
- PHP 读取SQL output返回值问题
- 为什么访问.php文件要在地址栏上加上localhost(即http://localhost/text.php)才能成功访问?
- 如下日历代码该如何修改
- 弱弱的提个安装问题, Apache 配置找不到文件
- 如何把select里的值插入到数据库里面
- 想通过URL来传送一条带条件的select语句,怎么传呢?
- 如果获取HTTP 请求协议的原始文本内容??
- 我的mysql已经可以连了,可是mysql_front 只能对数据库进行删除操作!
- 问题:如何修改Apache 配置文件httpd.conf中的Action ? 谢谢高手!
- 怎么取得执行文件exe上的数字签名内容??
- 求vn700等各大高手!求助PHP正则!
- 求PHP时间比较方法(注:只比较小时,不理会分秒的)
if ($n>100) {$n=5;}
$n = rand(1,110);
if ($n>100) {$n = $n - 10;}
if ($n>100) {$n=5;}
$n = rand(1,100);
if($n >90) $n = 5;
為什麼是無用功$n 是 1 - 100的隨機數
那麼$n > 90就是占了 10% 的區域
那麼 $n 就有 10% 的機會等於5
rand(1,110),每个数平均出现, 每个数出现概率是1/110
其中101-110=〉5, 5=〉5, 不错,11个可能是出现5, 所以 11/110 = 10%注释2:为什么9楼不对? 见注释1注释3:7楼的是什么意思?
嗯,“令到所有数字都增加10%的出现机率”,这个是不可能的。
因为。。一个随机事件中,各个可能结果的概率的和必为1,如果原来1-100,每个出现的概率为1%,每个都增加10%。(还不懂的请复习/学习《概率论》相关书籍)注释4:那么13楼的不对吗?
这个,从楼主的描述来看,13楼几乎就是对的了
如果改为
$n = rand(1,100);
if($n >91) $n = 5;
那么, 5出现的可能是10/100=10% 那么,怎么出现了两个正确答案??!!
还有其它答案吗?有
$n = rand(1,100);
if($n=10) $n = 5; 也对。依此类推 原因是楼主只要求5出现的概率上升到10%,没规定其它数的概率作何变化。
因为各个结果概率和为1, 5的概率上升,必然导致其它(所有或部分)数出现概率下降。 那么1楼的是在5上升到10%的同时,其它所有数(1-100,除去5)的概率同等下降到1/110
而13楼的是在5上升到10%的同时,1-91的概率不变,为1%,而92到100的概率下降到0.希望大家完全懂了.....当然,我相信1楼是更符合楼主的想法的真正的正解
例如:
$n=rand(1,100);
if ($n>90) {$n=5;}
就是说1到100都应该有机会取到。现在我想让其中的一个数值(比如5)出现的概率为10%
没有特殊说明也就是1到100中除了5以外的99个数字机会均等,合起来的概率是90%
99/0.9=110,rand(1,110)取到超出1-100范围的的数字就得看成是5,取到1-100范围内的话那就是取到什么就算什么,所以5的概率是(1+(110-100))/110=11/110=10%其实楼主的问题用到的php知识就是rand和if,剩下的是小学语文的理解力,小学数学的分子分母。
当然对于知道5的概率为10%的情况下还强求其他99个数字每个要保持1%概率的,我就不知道该归结为生活常识还是大学概率论了。
从此帖看来, 无论是否影响其它数的概率, rand()只能取一个数,其它数的概率就可以忽略掉, 所以一楼正确。