zoukankan      html  css  js  c++  java
  • JS 实现 微信随机发红包思路

    开年过来东莞,在回家路上在长沙Net社区群里看到有朋友提了一个发红包的问题,很多地方都有类型需求。整理了一下。开盒即用

    总金额为100    最大金额10  最小金额2   要求随机生成15个数   这15个数的总和为100 

    看到钱 来了兴趣了解了一下,大概需求是:100元 ,15个人分,金额大小在2~10之间。

    整理思路:

    1:随机数 范围有限制。

    2: 随机15次 给10个分钱,这个时候可能分的钱大于100 或者小于100。

    3:在减钱  或者加钱处理。

    code如下:

     1     <script>
     2         /* 金额,最大金额,最小金额,人数 */
     3         let money = 100,
     4             maxRanDomNum = 15,
     5             mixRandomNum = 2,
     6             people = 15;
     7         /* 最终分到的钱 */
     8         let arrMonery = [];
     9 
    10         /* 第一步:给15个人分钱 在最小,最大范围内,不管分多还是少 */
    11         for (let index = 0; index < people; index++) {
    12             const value = randomNum(mixRandomNum, maxRanDomNum);
    13             arrMonery.push(value);
    14         }
    15 
    16         /* 第2步: 分的钱多还是少 ,如果是0 ,刚好分到100元 */
    17         let sumMoney = ArrTotal(arrMonery) - money;
    18         /* 钱大于100 */
    19         if (sumMoney > 0) {
    20             for (let index = 0; index < sumMoney; index++) {
    21                 const num = parseInt(Math.random() * people);
    22                 //某一个人分到的钱小于mixRandomNum,停止减钱 但是sumMoney要加1
    23                 if (arrMonery[num] == mixRandomNum) {
    24                     sumMoney = sumMoney + 1;
    25                     continue;
    26                 }
    27                 arrMonery[num]--;
    28             }
    29         }
    30         /* 钱 小于100 */
    31         else if (sumMoney < 0) {
    32             for (let index = 0; index < sumMoney; index++) {
    33                 const num = parseInt(Math.random() * people);
    34                 //某一个人分到的钱是15元,停止加钱 但是sumMoney要加1
    35                 if (arrMonery[num] == maxRanDomNum) {
    36                     sumMoney = sumMoney + 1;
    37                     continue;
    38                 }
    39                 arrMonery[num]++;
    40             }
    41         }
    42         /* 打印钱的总和 */
    43         console.log("打印钱的总和 " + ArrTotal(arrMonery));
    44 
    45         /* 打印所有分到的钱 */
    46         console.log(arrMonery);
    47 
    48         /* 数组之和 */
    49         function ArrTotal(arr) {
    50             if (!arr instanceof Array) {
    51                 console.error("参数错误,请传入数组");
    52                 return;
    53             }
    54             if (arr.length == 0) {
    55                 console.error("数组长度是0");
    56                 return 0;
    57             }
    58             return eval(arr.join("+"));
    59         }
    60 
    61         //生成从minNum到maxNum的随机数
    62         function randomNum(minNum, maxNum) {
    63             switch (arguments.length) {
    64                 case 1:
    65                     return parseInt(Math.random() * minNum + 1, 10);
    66                     break;
    67                 case 2:
    68                     return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
    69                     break;
    70                 default:
    71                     return 0;
    72                     break;
    73             }
    74         }
    75     </script>

    开盒即用。

    缺点:分到15元几率非常小

    资料参考:

    随机数:https://www.cnblogs.com/starof/p/4988516.html

    需求2:10个人随机分100元

    var arr  = new Array(10).fill(0)
    for(var i=0;i<100;i++){
        var num = parseInt(Math.random()*10)
        arr[num] ++
    }
    console.log(arr)
  • 相关阅读:
    路径规划算法总结
    常用滤波器整理
    Debian 9 strech 安装 ROS lunar
    understand 安装笔记
    protobuf 安装与卸载
    maven-surefire-plugin
    spring数据源、数据库连接池
    日志插件总结
    pom.xml常用元素解析
    BeanFactory笔记
  • 原文地址:https://www.cnblogs.com/y112102/p/12335831.html
Copyright © 2011-2022 走看看