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个 ...
随机推荐
- ThinkPHP框架 【 AJAX方法返回 】 例子:简单添加一条数据 和 查询一个表里的数据
注:thinkphp使用ajax和之前使用ajax的方法一样,不同点在于之前的ajax中的url指向了一个页面,而thinkphp里面的url需要指向一个操作方法. 在模块控制器Controller文 ...
- ABP之展现层(导航菜单)
基本的增删改查已经粗糙的结束了,接下来就是要方便的展示了,也就是导航菜单.在Abp中已经对导航栏的设置进行了相应的封装(Abp.Application.Navigation),可以方便我们快速的将自己 ...
- DB2 rollforward 命令使用详解
DB2 rollforward 命令使用详解 原文:https://www.ibm.com/developerworks/cn/data/library/techarticles/dm-1003wuc ...
- /usr/bin/ld: 找不到 -lmsc----解决方案
系统的默认搜索依赖库路径为,/usr/local/lib 在camkelists.txt文件中对可执行文件链接libmsc.so add_executable(iat_publish src/iat_ ...
- centos 7 部署 MQTT
官方教程 :头痛的是nginx 和 mqtt布局有所冲突,后台不能使用需要调整,当然是用 nginx自家的布局没问题,但是要收费 官方地址 1.由于emqttd是用Erlang语言编写的,所以,在L ...
- Codeforces 219C - Color Stripe - [DP]
题目链接:http://codeforces.com/problemset/problem/219/C 题意: 给你 $n$ 个方块排成水平一排,每个方块都涂上 $k$ 种颜色中的一种.要求对尽量少的 ...
- LeetCode 155 - 最小栈 - [数组模拟栈]
题目链接:https://leetcode-cn.com/problems/min-stack/description/ 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的 ...
- 在SVNX中实现$Ids的自动替换
在PHPstorm中实现$Ids的自动替换 ①.打开SVN的配置文件. [miscellany] enable-auto-props = yes [auto-props] .c = svn:keywo ...
- Python中给List添加元素的4种方法
https://blog.csdn.net/hanshanyeyu/article/details/78839266 List 是 Python 中常用的数据类型,它一个有序集合,即其中的元素始终保持 ...
- SpringMVC 的使用映射路径 <mvc:resources >
以下是测试结果,可能存在纰漏,暂记录一下. 使用springMVC时,一般将DispatcherServlet请求映射配置为"/",则Spring MVC将捕获Web容器所有的请求 ...