zoukankan      html  css  js  c++  java
  • PHP 红包功能代码

    前段时间被问这个问题,最近有空就写写啦,还是挺有趣的

    首先做下抢红包方法分类:

    对于发红包的人来说,一共有大致3类(其他的我暂时没想到,有想到可以联系我呀~)

    一、拼手气红包个数不定(完全看运气)

    二、拼手气红包规定个数(个数一定,至少一分)

    三、平均分红包(个数一定,大家平分)还是这个好写是吧!嘿嘿

    上代码:

    <?php
    var_dump(rob_red_bages(5 , 10));
    
    var_dump(distribute_red_bages(5));
    
    /*
    方法主要功能:拼手气红包(个数不定)
    一个参数
        参数一: 红包总金额(按分计算)
    */
    function distribute_red_bages($sum){
        $sum = $sum*100;
        $i=0;
        while($sum>0){
            $temp = rand(1 , $sum);//红包值
            $sum -= $temp;
            $arr[$i++] = $temp/100;
        }
        //check($arr);
        return $arr;
    }
    
    /*
    方法主要功能:均分红包
    两个参数:
        参数一: 红包总金额
        参数二: 均分个数
    */
    function average_red_bages($sum , $num){
        $res = $sum/$num;
        for($i=0 ; $i<$num ; $i++){
            $arr[$i] = $res;
        }
        //check($arr);
        return $arr;
    }
    
    /*
    方法主要功能:规定个数的手气红包
    两个参数: 
        参数一:红包总金额
        参数二:红包个数
        
        计算流程,随机生成num个数
        求和得到m
        用sum/m 得到每个数需要k
        用随机数*k
    */
    function rob_red_bages($sum , $num){
        $sum = $sum*100;
        for($i=0 ; $i<$num ; $i++){
            $temp = rand(1 , $sum);
            $arr[$i] = $temp;
            $sumall += $temp;
        }
        $k = $sum/$sumall;
        for($i=0 ; $i<sizeof($arr); $i++){
            $arr2[$i] = $arr[$i]*$k/100;        
        }
        return $arr2;
    }
    
    /*红包总额检测*/
    function check($arr){
        foreach($arr as $a){
            $sum += $a;
            echo $a."+";
        }
        
        echo " 0 =".$sum."
    ";
    }
    
    
    ?>

    下面分析下拼手气红包吧(平分的就不说了,大家都会):

    拼手气红包个数不定思路:(总金额:sum)

     ---->随机第一个小于sum的数: n 

     ---->总金额减去该数: temp = sum-n 

     ---->随机一个小于temp的数

     ---->递归上述方法直到总金额为0

     ---->返回存储随机结果的数组

    这个方法比较常规,用来实现规定个数的红包也是可以实现的!不过~

    拼手气红包规定个数思路(总金额 sum,红包个数 num )

     ---->随机num个小于sum的数,生成数组

     ---->对这些数求和得到allsum

     ---->用sum除以allsum得到所有生成数的公倍数

     ---->数组每个元素与公倍数相乘得到每个红包的的数值

    这个方法有缺点(最终的结果可能会略大于sum,或者略小于sum 因为除法可能出现无理数)

    大概就是这些啦!欢迎交流指正!~~~

  • 相关阅读:
    使用微软TFS代码管理工具和在金山快盘上搭建SVN的使用方法
    微软的Windows8安装体验
    软件注册码随笔
    软件注册码(算法一DES)
    PHP连接SAE平台MYSQL
    一点一滴《C++处理数据》
    BouncyCastle.Crypto的RSA算法调用源码
    一点一滴《C++学习》
    软件注册码(算法二Rijndael)
    Web 应用程序的程序常见安全防范
  • 原文地址:https://www.cnblogs.com/wobeinianqing/p/6668680.html
Copyright © 2011-2022 走看看