本文介绍一种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 < groupSize && remainingNumbers > 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; }
改进的核心在于:
这个改进后的算法能够更有效地将随机数平均分配到各个分组中,避免了原始算法中的错误。 最后,代码中还包含可选部分,用于生成实际的随机数,而不是仅仅分配数量。 用户可以根据需求选择是否启用此部分代码。
以上就是如何用JavaScript根据总数和分组大小生成平均分配的随机数?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号