连续自然数的和

输入正整数T,输出T可以由连续自然数的和表示的所有情况及其数量。
如输入:9
输出:
9=9
9=4+5
9=2+3+4
Result=3
解释:9可以由3种形式的连续自然数的和表示,Result为3。

import copy
def func(lists):
if sum(lists) == T:
    return True,0
elif sum(lists) < T:
    return False,0
else:
    return False,1

def fun(n):
    sum_list=[]
    if n%2 == 0:
        module_num=n//2
    else:
        module_num=n//2+1
    num_list=[]
    for i in range(1,module_num+1):
        num_list.append(i)
        sta,sta_id=func(num_list)
        if sta:
            sum_list.append(copy.deepcopy(num_list))
        if not sta and sta_id==0:
            continue
        else:
            for j in range(len(num_list)):
                num_list.pop(0)
                sta, sta_id = func(num_list)
                if sta:
                    sum_list.append(copy.deepcopy(num_list))
                if not sta and sta_id == 0:
                    break
    sum_list.append([T])
    for n_list in sum_list[::-1]:
        print("{}={}".format(T,"+".join(list(map(str,n_list)))))
    print("Result={}".format(len(sum_list)))

if __name__ == '__main__':
    T=int(input("input a num:"))
    fun(T)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值