如何用JavaScript实现按阶梯式许可方案分配客户许可证?
JavaScript 许可方案分配实现思路与示例
核心思路
基于你给出的示例,先明确分配规则:
- 第一个区间:
1~10,最多覆盖10个客户 - 第二、第三个区间:
11~30、31~50,每个最多覆盖20个客户 - 后续区间:从
51~100开始,每个区间覆盖50个客户(以此类推,如101~150、151~200...) - 剩余不足一个区间容量的客户,直接归入当前对应的区间
实现步骤:
- 初始化变量:记录已分配客户数、当前区间的起始/结束值、结果数组
- 按优先级依次处理不同区间段:先处理10个的初始区间,再处理20个的中间区间,最后处理50个的后续区间
- 每次计算剩余客户数,判断是否能填满当前区间,不能则取剩余数,更新已分配数量和区间范围
- 将每个分配的区间和数量存入结果数组
示例代码
function assignLicenses(totalCustomers) { const result = []; let allocated = 0; let start = 1; let end = 10; // 处理第一个区间:1~10,最多10个 if (totalCustomers > 0) { const count = Math.min(10, totalCustomers - allocated); result.push({ range: `${start}至${end}`, count }); allocated += count; start = end + 1; end += 20; // 下一个区间是11~30 } // 处理接下来两个20容量的区间:11~30、31~50 for (let i = 0; i < 2; i++) { if (allocated >= totalCustomers) break; const count = Math.min(20, totalCustomers - allocated); result.push({ range: `${start}至${end}`, count }); allocated += count; start = end + 1; end += 20; } // 处理后续50容量的区间:51~100、101~150... while (allocated < totalCustomers) { const count = Math.min(50, totalCustomers - allocated); result.push({ range: `${start}至${end}`, count }); allocated += count; start = end + 1; end += 50; } return result; } // 测试输入51的情况 console.log(assignLicenses(51)); // 输出: // [ // { range: '1至10', count: 10 }, // { range: '11至30', count: 20 }, // { range: '31至50', count: 20 }, // { range: '51至100', count: 1 } // ]
灵活调整说明
如果你的区间规则有变化(比如后续区间容量改为10的倍数递增,如10、20、30、40...),只需要修改对应区间的容量值和end的增量即可。比如把后续的50改成递增10,就将end +=50改为end +=10,容量参数改为对应递增数值,调整起来非常灵活。
内容的提问来源于stack exchange,提问作者Yelmox
相关产品推荐
相关产品推荐

