假如我有A组 和 B组两个小组,A小组和B小组下面有若干个小组成员(每个小组的成员人数是可以确定的)
假设A组的分配率是百分之五十, B组的是百分之一百,
进来一群人,根据小组的分配率,分别分配给A B两组里面的小组成员,
但是进来的这群人的数量数不确定的,请问我怎么能保证,根据A和B两组的分配率来分配呢
请教下思路,谢谢

解决方案 »

  1.   

    A组的分配率是百分之五十, B组的是百分之一百
    就是每 3 个中:2 个给 B, 1 个给 A
      

  2.   

    写成代码就是$r = array();
    for($i=0; $i<100000; $i++) {
      $n =get_rand(array('A'=>50, 'B'=>100)); 
      @$r[$n]++;
    }
    print_r($r);function get_rand($proArr) {
        $proSum = array_sum($proArr);
        $randNum = mt_rand(1, $proSum);
        foreach($proArr as $key => $proCur) {
            $proSum -= $proCur;
            if($randNum > $proSum) {
                return $key;
            }
        }
    }Array
    (
        [B] => 66627
        [A] => 33373
    )
      

  3.   


    $weight=array('A'=>50,'B'=>100); // 比重
    $num = 100; // 人数
    $result = get_rand($num, $weight);
    print_r($result);function get_rand($num, $weight){
        $result = array();
        $total = array_sum($weight);
        $i=0;
        foreach($weight as $k=>$v){
            if($i<count($weight)-1){
                $result[$k] = (int)($num * $v/$total);
            }else{
                $result[$k] = $num - array_sum($result);
            }
            $i++;
        }
        return $result;
    }
    Array
    (
        [A] => 33
        [B] => 67
    )