zoukankan      html  css  js  c++  java
  • 红包算法

    <?php
    $r = redEnvelope(100, 10, 12, 6);
    echo array_sum($r); //校验结果
    print_r($r); //查看分布
     
    function redEnvelope($sum, $num, $max, $min){
      $result = array_fill(0, $num, $min);
      $loop = $sum - $num * $min;
      $i = 0;
      while($loop) {
        $randNum = mt_rand(1, min($loop, $max - $min));
        if($randNum && $result[$i] + $randNum <= $max) {
          $result[$i] += $randNum;
          $loop -= $randNum;
        }
        $i = ($i + 1) % $num;
      } //分配结束
      //$max 至多出现一次
      $m = array_keys($result, max($result));
      if(count($m) > 1 && $result[$m[0]] == $max) {
        for($i=1; $i<count($m); $i++) {
          $n = array_keys($result, min($result));
          $result[$m[$i]]--;
          $result[$n[0]]++;
        }
      }
      //$min 至多出现一次
      $m = array_keys($result, min($result));
      if(count($m) > 1 && $result[$m[0]] == $min) {
        for($i=1; $i<count($m); $i++) {
          $n = array_keys($result, $min + 2);
          $result[$m[$i]]++;
          $result[$n[0]]--;
        }
      }
      return $result;
    }
  • 相关阅读:
    thinkphp url生成
    thinkphp url大小写
    thinkphp 伪静态
    thinkphp action参数绑定
    thinkphp 前置和后置操作
    thinkphp 控制器定义
    thingkphp 路由实例
    thinkphp 闭包支持
    thinkphp 静态路由
    thinkphp 正则路由
  • 原文地址:https://www.cnblogs.com/csjoz/p/7244076.html
Copyright © 2011-2022 走看看