You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript实现按阶梯式许可方案分配客户许可证?

JavaScript 许可方案分配实现思路与示例

核心思路

基于你给出的示例,先明确分配规则:

  • 第一个区间:1~10,最多覆盖10个客户
  • 第二、第三个区间:11~30、31~50,每个最多覆盖20个客户
  • 后续区间:从51~100开始,每个区间覆盖50个客户(以此类推,如101~150、151~200...)
  • 剩余不足一个区间容量的客户,直接归入当前对应的区间

实现步骤:

  1. 初始化变量:记录已分配客户数、当前区间的起始/结束值、结果数组
  2. 按优先级依次处理不同区间段:先处理10个的初始区间,再处理20个的中间区间,最后处理50个的后续区间
  3. 每次计算剩余客户数,判断是否能填满当前区间,不能则取剩余数,更新已分配数量和区间范围
  4. 将每个分配的区间和数量存入结果数组

示例代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:30:41