PHP将一个数字划分成随机数值,总和与数字相同

2018-09-14 14:06:52 admin 53

PHP将一个数字划分成随机值,总和与数字相同
今天有个任务,非常奇怪,需要把一个数字值分为X个数,每个数的值是随机的,而已所随机出来的数相加必须=总数。
比如有一个数是100,我想把他分成5(或者N)份,每份的数是不一样的,但是加起来要是100,而且每份不能差距太大,这个用php如何实现?
这样我们就需要下面的PHP将一个数字划分成随机值,总和与数字相同的函数了
大致思路
1)取份数的平均值
2)根据允许的各份数间最大差值,动态调整随机数范围,形成各份的数量
3)最后一份的数量由前面已经分出的决定,以保证各份的总和为指定值


<?php

   function randnum($total,$div){

   $total $total//待划分的数字

   $div $div//分成的份数

   $area = 50; //各份数间允许的最大差值

   $average round($total $div);

   $sum = 0;

   $result array_fill( 1, $div, 0 );



   for$i = 1; $i $div$i++ ){

    //根据已产生的随机数情况,调整新随机数范围,以保证各份间差值在指定范围内

    if$sum > 0 ){

     $max = 0;

     $min = 0 - round$area / 2 );

    }elseif$sum < 0 ){

     $min = 0;

     $max round$area / 2 );

    }else{

     $max round$area / 2 );

     $min = 0 - round$area / 2 );

    }



    //产生各份的份额

    $random = rand( $min$max );

    $sum += $random;

    $result[$i] = $average $random;

   }



   //最后一份的份额由前面的结果决定,以保证各份的总和为指定值

   $result[$div] = $average $sum;

   foreach$result as $temp ){

   $data[]=$temp;

   }

   return $data;

   }



   /*调用方法*/



   $x=randnum(100,5);

   print_R($x);





PHP将一个数字划分成随机值,总和与数字相同结果值:
Array
(
    [0] => 29
    [1] => 18
    [2] => 17
    [3] => 2
    [4] => 34
)
以上结果显示,返回的数组大小基本一样,各数相加等于总数,到此任务完成!



在宁波做微信商城,就选择又想网络,又想网络专业做 宁波三级分销系统,宁波微分销系统,宁波分销系统