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

如何将整数分割为和为原值、近似均等且分布均匀的数组?

整数均匀分割算法实现

要实现将整数n分割为d个满足要求的数组元素,核心是保证元素大小差异最小且分布均匀,具体算法如下:

核心逻辑

  1. 计算基础值:base = n // d,这是每个元素的最小取值;
  2. 计算余数:extra = n % d,这代表有extra个元素需要比基础值大1(即base + 1),所有元素总和刚好等于n;
  3. 将这extra个base + 1均匀分散在数组中,避免集中堆积。

具体实现(Python示例)

def split_uniformly(n, d):
    if d == 0:
        raise ValueError("分割份数不能为0")
    base = n // d
    extra = n % d
    result = [base] * d
    if extra == 0:
        return result
    
    # 计算大元素的间隔,保证均匀分布
    step = d // extra
    current_idx = step - 1  # 第一个大元素的位置
    for _ in range(extra):
        result[current_idx] += 1
        current_idx += step
        # 处理d无法被extra整除的边界情况
        if current_idx >= d:
            current_idx = d - 1
    return result

验证示例

当n=13,d=10时:

  • base=1,extra=3,step=10//3=3
  • 大元素的位置为2、5、8,最终数组为[1, 1, 2, 1, 1, 2, 1, 1, 2, 1],完全符合要求。

为什么满足要求

  • 总和正确:(d - extra)*base + extra*(base+1) = d*base + extra = n,与原整数相等;
  • 大小近似均等:所有元素仅为base或base+1,最大差值为1,不会出现悬殊过大的元素;
  • 分布均匀:通过计算间隔step,将extra个大元素均匀分散在数组中,避免集中在某一段。

内容的提问来源于stack exchange,提问作者Tim Angus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:45:41