直接调用这个方法就行 传递q(金额)和r(人数就行)
保证人均最少一分钱
当剩余金额大于80%的时候,会在金额20%的区间内取大红包随机分配;
基础分配规则为,按照每人可以随机5次的要求,得出每次随机的金额,随机分给其中一人
function fen(q, r) {
//q=红包金额 单位元,最小0.01 r=分配人数
if (typeof (objs) == 'undefined') {
if (q == undefined || r == undefined || q100<r || q<0.01) {
console.log('参数错误')
return;
}
objs = {
money: q, //红包金额
num: r, //参与人数
arr: [], //返回结果
smoney: q * 100, //金额转成分
sy: q * 100, //剩余分配金额
number:0 //执行次数
}
//保底一分
for (var i = 0; i < objs.num; i++) {
objs.smoney -= 1;
objs.sy -= 1;
objs.arr.push(1)
}
}
objs.number++;
var max = objs.sy;
var f = 0;
//分配算法,等额金额保证让没人有五次机会 首次获取20%的金额当大头
var suo = (objs.smoney / objs.num / 5)
if (objs.sy > objs.smoney0.8) {
max = objs.smoney * 0.2;
f = Math.floor(Math.random() * max) + 1
}else if (objs.sy > suo) {
max = suo;
f = Math.floor(Math.random() * max) + 1
} else {
f = max;
}
objs.sy -= f;
objs.arr[Math.floor(Math.random() * objs.arr.length) ] += f;
if (objs.sy > 0) {
//没分完重复执行
fen()
} else {
for (var i = 0; i < objs.num; i++) {
objs.arr[i] = parseFloat(objs.arr[i] / 100)
}
//返回结果,重置参数
console.log('结果:'+objs.arr, '执行次数:' + objs.number)
objs = undefined;
}
}
结果示例,如果平均每人分配不到一分钱可是会报错哦