javascript 发红包算法

需求:今年各大IT界的巨头都添加了发红包的需求,所以咱们公司也不能落后。

系统中对于红包发放有两种方式:

     1.固定红包即没人每次得到的红包都是定额的。

     从程序员的角度来说:就是给每个人已经固定了红包的金额。

    2.拼手气红包即有一个红包池,然后让池外的用户随机抽取红包(不过在程序上来说还是定额的哦!)

          程序具体算法:

          

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4     
 5 <script>
 6 var MAX = 200;      //微信红包限制,最大金额
 7 var MIN = 1;        //微信红包的限制,最小金额
 8 var totalNum = 1000;        //红包总数量
 9 var totalMoney = 1500;      //红包总金额
10 var maxNumRate = 0.02;      //大额红包获得者占总数的百分比
11 var maxMoneyRate = 0.99;    //大额红包占总金额的比例
12 
13 function cal(){
14     var t = totalMoney - totalNum * MIN;
15     var tMax = t * maxMoneyRate;
16     if(tMax > (MAX - MIN) * totalNum * maxNumRate){
17         tMax = (MAX - MIN) * totalNum * maxNumRate;
18     }
19     var tMin = totalMoney - tMax;
20     
21     if (Math.random() < maxNumRate){
22         //大红包
23         if(tMax == (MAX - MIN) * totalNum * maxNumRate){
24             return [MAX, 1];
25         }
26         var f = (MAX - MIN - tMax / totalNum);
27         if(f > (tMax / totalNum - MIN)){
28             f = (tMax / totalNum - MIN) / 2;
29         }
30         if(f > 10){
31             f = 10;
32         }
33         var rnd = Math.random() - 0.5; //-0.5 ~ 0.5
34         var r = tMax / (totalNum * maxNumRate) + rnd * f + MIN;
35         r = r > totalMoney ? totalMoney : r;
36         return [r, 1];
37     }else{
38         //小红包
39         var n = totalNum * (1 - maxNumRate);
40         var avg = tMin / n;
41         var rnd = (Math.random() - 0.5) / 10; //-0.05~0.05
42         var r = MIN + avg * rnd;
43         return [r > MIN ? r : MIN, 0];
44     }
45     
46 }
47 </script>
48     </head>
49     <body>
50         <ol>
51     <script>
52     var m = 0;
53         var t = 1000;
54     for(var i=0; i<t; i++){
55         var m1 = cal();
56         m += m1[0];
57         document.write("<li style='color:" + (m1[1] == 1 ? "red" : "black") + "'>" + m1[0] + "</li>");
58     }
59     document.write("<li>Total:" + t + "; cost: " + m + "</li>");
60     </script>
61     </ol>
62         
63     </body>
64 </html>

 

posted @ 2015-03-27 09:46  码渣圣人  阅读(532)  评论(0)    收藏  举报