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>
js抽红包分配的更多相关文章
- java实现微信红包分配算法
红包算法分析 有人认为,抢红包的额度是从0.01到剩余平均值*N(N是一个系数,决定最大的红包值)之间,比如一共发了10块钱,发了10个红包:第一个人可以拿到(0.01~1*N)之间的一个红包值,当然 ...
- 研究微信红包分配算法之Golang版
今天来看一下红包的分配,参考几年前流传的微信红包分配算法,今天用Golang实现一版,并测试验证结果. 微信红包的随机算法是怎样实现的?https://www.zhihu.com/question/2 ...
- js 发红包
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- 如何用 js 实现一个类似微信红包的随机算法
如何用 js 实现一个类似微信红包的随机算法 js, 微信红包, 随机算法 "use strict"; /** * * @author xgqfrms * @license MIT ...
- C#开发微信门户及应用(38)--微信摇一摇红包功能
摇一摇周边红包接口是为线下商户提供的发红包功能.用户可以在商家门店等线下场所通过摇一摇周边领取商家发放的红包.我曾经在<C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实 ...
- 使用PHP编写发红包程序
使用PHP编写发红包程序 http://www.jb51.net/article/69815.htm 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2015-07-22 微信发红 ...
- Python微信红包算法
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- python 微信红包生成器
#红包生成思路#200 块钱 10个红包#0-200 的一个轴,随机取9个点,分成10段, 每一段的值表示一个红包的大小 #把输入的 money值 * 100 拿到的数值就是分, 不用再考虑单位是元的 ...
- PHP+Ajax手机移动端发红包实例
基本流程:当输入完红包数量和总金额后,PHP会根据这两个值进行随机分配每个金额,保证每个人都能领取到一个红包,且每个红包金额不等,并且所有红包金额总额等于总金额. 实现原理:设定总金额为10元,有N个 ...
随机推荐
- PHP基础语法 【】【】 PHP函数
<?php //注释语法 /* 多行注释 */ //输出语法 echo "hello"; echo "world","dhakj"; ...
- Oracle客户端的安装与远程连接配置
在继续Oracle客户端的安装之前,需要分析一下Oracle客户端与数据库服务器之间的连接机制. 一.Oracle客户端与服务器端的通讯机制 1.Oracle Net协议 如下图所示,Oracle通过 ...
- 编译openssl失败(SLES11.3), undefined reference to `OPENSSL_cpuid_setup'
https://stackoverflow.com/questions/11381514/undefined-reference-when-compiling-openssl I ran into t ...
- 一窥Spring Cloud Eureka
在Spring Cloud中Eureka负责服务发现功能.服务发现需要解决如何找到服务提供者在网络中位置的问题. 服务端 在Spring Tool Suite的文件菜单中,点击新建Spring Sta ...
- mapReducer 去重副的单词
需求是: 统计输出某目录文件的所有单词,去除重复的单词. mapper阶段正常做map工作,映射. 切割单词. <key,value> --> <word,nullWrita ...
- TensorRT下安装pycuda
为了模型小型化,效率更高,使用TensorRT进行优化.前提是你必须要安装pycuda,可是费了我一番功夫.做一个笔记如下: 1.参考网址: https://wiki.tiker.net/PyCuda ...
- samba速度调优
本来windows上传到板子上的速度很慢 增加 socket options = TCP_NODELAY 明显上传下载速度都快了 参考: https://superuser.com/questions ...
- 如何实现浏览器向服务器伪造refer?
Request URL:https://www.getwnmp.org/ Request Method:GET Status Code:304 Remote Address:45.55.134.251 ...
- ODOO权限管理,在两个方面设置权限
转载参考https://zhuanlan.zhihu.com/p/29130388 在odoo中新建两个用户user1,user2 新建用户 建完了用户,记得编辑用户,设置密码. 然后以user1用户 ...
- linux 搭建ftp服务
一. 安装ftp yum -y install vsftpd 二.配置 安装完之后在/etc/vsftpd/路径下会存在三个配置文件. vsftpd.conf: 主配置文件 ftpusers: 指定哪 ...