请问rand()函数结果值出现的比例问题
 假设我们的rand()函数的范围是1到100现在我想让其中的一个数值(比如5)出现的概率为10%
请问应该怎么写

解决方案 »

  1.   

    $n = rand(1,110);
    if ($n>100) {$n=5;}
      

  2.   

    //改一下江南昆虫的代码, 这样, 可以令到所有数字都增加10%的出现机率
    $n = rand(1,110);
    if ($n>100) {$n = $n - 10;}
      

  3.   

    一楼的是错的,我改正了。因为1-100中本身就包含个5$n = rand(1,119);
     if ($n>100) {$n=5;}
      

  4.   

    写错了,应该是109一楼的是错的,我改正了。因为1-100中本身就包含个5    $n = rand(1,109); if ($n>100) {$n=5;}
      

  5.   

    我在想,為什麼不是
    $n = rand(1,100);
    if($n >90) $n = 5;
      

  6.   


    為什麼是無用功$n 是 1 - 100的隨機數
    那麼$n > 90就是占了 10% 的區域
    那麼 $n 就有 10% 的機會等於5
      

  7.   

    为什么1楼的jnkc发了言就飘然而去。。留下我一个人独自。给他的code做注释。注释1:为什么1楼的是正确的?
      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楼是更符合楼主的想法的真正的正解   
     
      

  8.   

    更正:上面回复中 if($n=10) $n = 5; 应改为 if($n<=10) $n = 5;
      

  9.   

    不是rand(1,119); 概率10%的话是是rand(1,100);取任意的x1-(x+1)0
    例如:
    $n=rand(1,100);
    if ($n>90) {$n=5;}
      

  10.   

    假设我们的rand()函数的范围是1到100 
    就是说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%概率的,我就不知道该归结为生活常识还是大学概率论了。
      

  11.   


    从此帖看来, 无论是否影响其它数的概率, rand()只能取一个数,其它数的概率就可以忽略掉, 所以一楼正确。