• 生成n个随机数,要求n个数的和等于100


    // 生成n个随机数,要求n个数的和等于100
    function lessANumber(n, v) {
        var i,
            s = 0,
            r = [],
            x = v;
        for (i = 1; i < n; i++) {
            x = Math.random() * x;
            r.push(x.toFixed(0));
            s += x;
            x = v - s;
        }
        r.push(x.toFixed(0));
        return r;
    }
    function random(Min,Max){
             var Range = Max - Min;
             var Rand = Math.random();
             return(Min + Math.round(Rand * Range));
        }
        
        function randnum(n,max){
            
            var arr = [];
            if(max > 0){
                for(var i = 0;i<n;i++){
                    var num = 0;
                        if(i == (n-1)){
                            num = max;
                        }else{
                            if(max <= 0){
                                num = max = 0;
                            }else{
                                num = random(0,max);
                                max -= num;
                            }
                        }
                    arr.push(num);
                }
            }
            return arr;
        }
    
    
    
    
    
    function foo($n ,$max = 100){
        $array = $zero = $normal = [];
        for($i=1;$i<=$n;$i++){
            $array[] = mt_rand(0,100);
        }
        $k = $max / array_sum($array);  //求出放大系数k
        foreach($array as $key => $val){
            $value = floor($val * $k); //直接保留整数,以保证下一步的和肯定<100
            if($value<1){
                $zero[] = $value;
            }else{
                $normal[] = $value;
            }
        }
        $sum = array_sum($normal);
        $diff = $max - $sum; //这个值肯定<100
        if(!empty($zero)){ //如果有为0的值
            $count = count($zero);
            foreach($zero as $z){
                $normal[] = $diff / $count;
            }
        }else{ //随机分配给一个人
            $key = array_rand($normal);
            $normal[$key] = $normal[$key]+$diff;
        }
        unset($array,$zero,$sum,$diff);
        return $normal;
    }

    javascript里的Math.random() 函数, 在php里

    function random($min = 0, $max = 1)
    {
        return $min + mt_rand()/mt_getrandmax()*($max-$min);
    }
  • 相关阅读:
    记录ICallbackEventHandler 同时并发访问容易引发的问题
    IIS 属性
    Solaris10 安装
    VerifyRenderingInServerForm和EnableEventValidation引发的两个问题
    Solaris 上网配置
    动态数据类型转换
    RDLC 折线图
    codesmith复制中文乱码解决
    关于手机等品牌型号搜索与采集的中文分词分离
    说点包租公限制共享上网的破事
  • 原文地址:https://www.cnblogs.com/phpfensi/p/6383256.html
Copyright © 2020-2023  润新知