
本文介绍一种JavaScript算法,用于根据总数和分组大小生成平均分配的随机数。 该算法旨在解决将指定数量的随机数平均分配到不同大小的分组中的问题,避免原始算法中出现负数或分配不均的情况。
问题描述:给定一个数组arr,其中每个对象包含一个test属性表示分组大小,以及一个总数num,需要生成num个随机数并平均分配到各个分组中。
原始算法存在的问题:原始算法在计算每个分组的随机数范围时,存在逻辑错误,导致分配不均或出现负数。
改进后的算法:
立即学习“Java免费学习笔记(深入)”;
以下代码提供了一种改进的算法,解决了原始算法中的问题:
function distributeRandomNumbers(list, num = 29) { const data = list.map((item) => Array.from({ length: Number(item.test) }).map(() => ({ min: 0, max: 0, num: 0 })) ); let count = list.reduce((sum, item) => sum + Number(item.test), 0); let remainingNumbers = num; for (let i = 0; i < list.length; i++) { const groupSize = Number(list[i].test); let numbersPerGroup = Math.floor(remainingNumbers / count); // 下取整,保证平均分配 if (count <= groupSize){ numbersPerGroup = Math.floor(remainingNumbers / count); } for (let j = 0; j 0; j++) { data[i][j].num = numbersPerGroup; remainingNumbers -= numbersPerGroup; } count -= groupSize; } // (可选) 如果需要生成实际的随机数,而不是数量,可以添加如下代码: // for (let i = 0; i < data.length; i++) { // for (let j = 0; j < data[i].length; j++) { // data[i][j].num = Math.floor(Math.random() * 100); // 生成0-99之间的随机数, 可根据需要调整范围 // } // } return data;}
改进的核心在于:
平均分配策略: 使用 Math.floor(remainingNumbers / count) 计算每个分组应分配的随机数数量,并进行下取整,确保平均分配。动态更新: 在循环中动态更新 remainingNumbers 和 count,以准确反映剩余随机数和分组数量。
这个改进后的算法能够更有效地将随机数平均分配到各个分组中,避免了原始算法中的错误。 最后,代码中还包含可选部分,用于生成实际的随机数,而不是仅仅分配数量。 用户可以根据需求选择是否启用此部分代码。
以上就是如何用JavaScript根据总数和分组大小生成平均分配的随机数?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1503454.html
微信扫一扫
支付宝扫一扫