2301_76953352 2023-03-11 10:41 采纳率: 66.7%
浏览 31
已结题

python一个数分成n个固定的数之和

如何用python解决这个问题
将一个数拆成n个固定的数之和,某些数出现的次数有最大限制

  • 写回答

4条回答 默认 最新

  • 青旒 2023-03-11 10:51
    关注

    接受一个数字 num 和一个数字列表 nums(表示可以使用的固定数字),以及一个字典 counts(该字典表示每个数字出现的最大次数).

    
    def split_number(num, nums, counts, path=[]):
        if num == 0:
            yield path
        for n in nums:
            if counts[n] > 0 and num >= n:
                counts[n] -= 1
                yield from split_number(num - n, nums, counts, path + [n])
                counts[n] += 1
    
    nums = [1, 2, 5, 10]
    counts = {1: 3, 2: 3, 5: 3, 10: 3}
    num = 15
    for result in split_number(num, nums, counts):
        print(result)
    

    该代码使用递归,每次从列表 nums 中选择一个数字,并将它从 num 中减去。如果 num 为 0,则返回当前的结果。否则,继续递归,直到找到合适的结果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月13日
  • 已采纳回答 3月11日
  • 创建了问题 3月11日

悬赏问题

  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示