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

Python求解互异整数立方和匹配目标值的代码修正问题

问题背景

需求为生成元素互不相同的整数列表,要求列表内所有整数的立方和恰好等于给定目标数。现有实现代码在多数测试用例下可正常运行,但计算如下目标值时输出不符合预期:

n=sum([n*n*n for n in range(1001)]) 

该场景下预期正确结果为 [6303, 457, 75, 14, 9, 7, 5, 4],程序实际输出为 [6303, 457, 75, 15, 8, 4, 3, 2, 1]。

现有错误代码
def sum_of_cubes(n):
    original=n
    i=1
    lst=[]
    tot=0
    while i**3<=n:
        i+=1
    lst.append(i-1)
    n-=(i-1)**3
    for j in range(lst[0],0,-1):
        if j**3<n:
            lst.append(j)
            n-=j**3
    if n==1:
        lst.append(n)
    for i in lst:
        tot+=i**3
    #if original-tot>1:
        #return None
    return lst

n=sum([n*n*n for n in range(1001)])
print(sum_of_cubes(n))
错误原因

现有代码采用最基础的贪心逻辑:从大到小遍历整数,只要当前数的立方小于剩余目标值就直接加入结果列表。这种只选局部最优的策略无法保证得到全局正确解:在这个测试用例里,选15之后剩余的差值只能靠多个小数字凑和,但跳过15选14就能凑出正确组合,单次贪心没有回溯纠错的能力,自然输出错误结果。

修正方法

替换单次贪心逻辑为带剪枝的深度优先回溯搜索即可:

  • 每次从大到小枚举可选整数,优先选大数加快搜索速度,同时限制后续选的数必须比当前选的数小,保证列表元素互不重复
  • 加剪枝判断:如果当前剩余需要凑的目标值,比当前可选的所有更小数字的立方总和还大,直接跳过这个分支,不用做无效遍历
  • 一旦找到刚好凑够立方和的组合就立刻返回,不用遍历所有可能性

修正后可运行代码如下:

def find_cube_sum(target):
    # 预计算立方值避免重复运算
    max_num = int(target ** (1/3)) + 2
    cube = [i**3 for i in range(max_num + 1)]
    # 预计算前缀立方和用于剪枝
    prefix_sum = [0]*(max_num + 1)
    for i in range(1, max_num+1):
        prefix_sum[i] = prefix_sum[i-1] + cube[i]
    
    def dfs(remain, upper_bound, path):
        if remain == 0:
            return path.copy()
        if remain < 0 or upper_bound == 0:
            return None
        # 剩余所有数加起来都不够凑目标,直接剪枝
        if prefix_sum[upper_bound] < remain:
            return None
        # 从大到小枚举提速
        for num in range(upper_bound, 0, -1):
            if cube[num] > remain:
                continue
            path.append(num)
            res = dfs(remain - cube[num], num-1, path)
            if res is not None:
                return res
            path.pop()
        return None
    
    return dfs(target, max_num, [])

n = sum([i*i*i for i in range(1001)])
print(find_cube_sum(n))

运行代码即可输出预期的正确结果。

内容的提问来源于stack exchange,提问作者raph c

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:21:18