javascript - JQ如何把一个数拆成很多个随机数,总和为这个数本身?
PHP中文网
PHP中文网 2017-04-11 09:06:23
[JavaScript讨论组]

1.比如我现在请求到一个1000,要拆分成60个随机数,而这60个随机数相加刚刚好等于1000?
2.我要在五分钟内从0每隔5秒慢慢加60次到1000,这样可以实现吗?
3.六十次后再次请求一个数,比如是3000,那么,把3000再次拆分成60个随机数,从1000慢慢在五分钟内加到4000
求大神相助

PHP中文网
PHP中文网

认证0级讲师

全部回复(2)
巴扎黑
function randompide(total, nums) {
    rest = total;
    const result = Array.apply(null, { length: nums })
        .map((n, i) => nums - i)
        .map(n => {
            const v = 1 + Math.floor(Math.random() * (rest / n * 2 - 1));
            rest -= v;
            return v;
        });
    result[nums - 1] += rest;
    return result;
}

// testing
const result = randompide(1000, 60);
console.log(result.join(","));
console.log(result.length);
console.log(result.reduce((acc, n) => acc + n));

怪我咯

采用 https://www.zhihu.com/questio... 里讨论的微信分红包算法,达到较为平均的随机分配。

var arr = getRandomNum(1000, 60);
console.log(arr);
console.log(arr.reduce((pre, v) => pre + v, 0));

function getRandomNum(num, times) {
  let res = [];
  if (times === 1) {
    res.push(num);
    return res;
  };
  let max = num / times * 2;
  let current = 1 + (~~(Math.random() * max - 1));
  res.push(current);
  return res.concat(getRandomNum(num - current, --times));
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号