基于js实现抽红包并分配代码实例

作者:muamaker 时间:2024-04-16 09:30:58 

这篇文章主要介绍了基于js实现抽红包并分配代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

将 50000元随机分给10个人,其中3个人必须分到百位数,4个人分到千位数,3个人分到万位数,每个人所得金额


<!DOCTYPE html>
<html lang="zh">
<head>
 <meta charset="UTF-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 <meta http-equiv="X-UA-Compatible" content="ie=edge" />
 <title>Document</title>
</head>
<body>
 将 50000元随机分给10个人,其中3个人必须分到百位数,4个人分到千位数,3个人分到万位数,每个人所得金额
</body>
<script type="text/javascript">  
 /**
  *
  * @param {Object} amount 总数钱
  * @param {Object} list [2,2,2,3,3,3,3,4,4,4] 3个百位,4个千位,3个万位
  */  
 //不要小数
 function devide(amount,list){
   var len = list.length;    
   //先计算所有的自身位数范围
   var arr = [];
   for(var i = 0; i < len; i++){
     var item = getRange(list[i]);

arr.push(item);
   }    
   var res = [];
   //只算n-1位,剩下最后一个,不用计算
   for(var i = 0; i < len-1; i++){
     var index = Math.floor(Math.random() * arr.length); //随机获取一个,然后用来取
     var item = arr.splice(index,1)[0]; //取出当前需要发的红包位数
     var result = calc(amount,item,arr);
     if(result){
       res.push(result);
       amount = amount - result;
     }else{
       return [];
     }
   }    
   if(arr[0].start > amount || arr[0].end < amount){
     console.warn("分配出现错误,请重新规划分配方案");
     return [];
   }    
   res.push(amount);
   return res;
 }  
 function calc(amount,item,arr){  
   //当其他的都取最小值时的总和,为了保证每个都分到
   var otherRange = getOtherRange(arr);
   var minStart = otherRange.countStart;
   var maxEnd = otherRange.countEnd;
   var mins = amount - minStart; //剩余可取
   var end = item.end;
   var start = item.start;
   if(start > mins){
     console.warn("分配出现错误,请重新规划分配方案");
     return false;
   }else if(end > mins){
     //如果最大范围大于剩余的
     end = mins;
   }    
   //则随机抽取从 start至end    
   var result = Math.floor(Math.random()*(end-start) + start);

if(amount - result > maxEnd){
     //取的值太小,其他的取最大值也分不完
     console.warn("分配出现错误,请重新规划分配方案");
   }

return result;
 }  
 //获取某位的范围
 function getRange(item){
   return {
     start:Math.pow(10,item),   //比如百位2,这里最小就是100
     end: Math.pow(10,item+1) - 1 //百位最大为 1000-1
   }
 }  
 //获取所有的范围
 function getOtherRange(arr){
   var countStart = 0;
   var countEnd = 0;
   for(var i = 0; i < arr.length; i++){
     countStart += arr[i].start;
     countEnd += arr[i].end;
   }
   return {
     countStart,
     countEnd
   };
 }
 console.log(devide(50000,[2,2,2,3,3,3,3,4,4,4]))
</script>
</html>

来源:https://www.cnblogs.com/muamaker/p/9325204.html

标签:js,红包,分配
0
投稿

猜你喜欢

  • Asp 操作Access数据库时出现死锁.ldb的解决方法

    2011-03-29 10:49:00
  • Python使用Phantomjs截屏网页的方法

    2022-06-17 15:47:14
  • Python实现Pig Latin小游戏实例代码

    2022-06-27 04:15:36
  • 详解将Django部署到Centos7全攻略

    2022-03-23 01:01:12
  • SQL Server 复制需要有实际的服务器名称才能连接到服务器

    2012-07-11 15:46:51
  • Python 从subprocess运行的子进程中实时获取输出的例子

    2023-12-24 18:31:10
  • MySQL 5.0.16乱码问题的解决方法

    2024-01-23 07:07:27
  • SQL server 自增ID--序号自动增加的字段操作

    2024-01-29 03:51:55
  • SqlServer应用之sys.dm_os_waiting_tasks 引发的疑问(上)

    2024-01-12 15:24:51
  • GO中的条件变量sync.Cond详解

    2024-02-10 15:08:35
  • Oracle数据库处理多媒体信息

    2010-07-16 13:01:00
  • 基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能

    2022-02-05 00:56:54
  • Redis IP地址的绑定的实现

    2023-07-20 12:00:21
  • js实现砖头在页面拖拉效果

    2024-05-22 10:40:24
  • 分析Python中设计模式之Decorator装饰器模式的要点

    2021-12-06 12:04:01
  • 学生信息管理系统Python面向对象版

    2021-11-11 03:11:04
  • java代码获取数据库表里数据的总数操作

    2024-01-14 23:41:31
  • mysql query browser中文乱码的解决方法

    2024-01-17 14:44:51
  • 设计师的职业规划

    2009-08-31 12:52:00
  • JS实现的倒计时效果实例(2则实例)

    2023-08-23 17:12:05
  • asp之家 网络编程 m.aspxhome.com