Python 求解1到100内加和为100的组合

该博客探讨了如何利用二进制表示来寻找1到n数列中加和为m的所有组合。通过不断迭代增加二进制位,文章详细解释了解题思路并提供了Python代码实现。代码通过生成所有可能的二进制序列,转换为对应的数字组合,检查这些组合的和是否等于目标值m。当找到符合条件的组合时,将其打印出来。
摘要由CSDN通过智能技术生成

Python 求解1到100内加和为100的组合

问题描述

求解1到n连续数列, (例如[1, 2, 3……n])数列内,加和等于m的组合

解题思路

使用二进制代表每个数字的选取,在此基础上进行加和验证

代码与结果

代码

def get_list(max_num=100):
    # 生成两个序列
    array_list = [int(0) for _ in range(max_num)]
    num_list = [int(i) for i in range(1, max_num + 1)]
    return array_list, num_list


def add_one_num(array_list):
    # 实现2进制加法
    if 2 in array_list:
        cursor = array_list.index(2)
        array_list[cursor] = 0
        array_list[cursor + 1] += 1
        add_one_num(array_list)
    return array_list


if __name__ == '__main__':
    # target_length:数列长度
    # target_sum:目标加合
    target_length = 100
    target_sum = 99

    array_list, num_list = get_list(target_length)

    while True:
        if sum(array_list) == len(array_list):
            break
        array_list[0] += 1
        array_list = add_one_num(array_list)
        num_sum = 0
        feasible_list = []
        for item in zip(array_list, num_list):
            num_sum = num_sum + item[0] * item[1]
            if item[0] != 0:
                feasible_list.append(item[1])

        if num_sum == target_sum:
            print(feasible_list, num_sum)

结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值