连续数的和为n的连续数有几个?

目录:

题目描述

做题过程

他人的想法

综合感悟

1.题目描述:

一共有多少种方式使 n 表示为若干个连续正整数的和,要求至少包括两个正整数。如 n=15 时,可以有 3 种方式:( 1+2+3+4+5 ),( 4+5+6 ),( 7+8 )

样例输入

2
3
15

样例输出

Case #1: 1
Case #2: 3

2.做题过程

这道题,一开始我想到了等差数列求和的原理。我想从n由两个连续数想加,三个连续数相加,四个连续数相加...判断每次是否都有这个整数,该整数就是首项,首项是整数就说明存在。

一开始我想最多应该不少于n-1项?所以把循环截止在n-1,但是复杂度可想而知。。

后来想想,不可能有n-1的循环,之后利用等差数列的求和公式,找到了n的范围是根号(2*n)。有效降低复杂度。

另外:因为i<根号(2a)所以这里的 d=(2*a-i*i+i)>0。

源码:

import math  
zs = int(input())  
c = []  
for i in range(zs):  
    a = int(input())  
    x = 0  
    for i in range(2,math.ceil(pow (2*a,0.5))): #  在这里利用等差数列求和的等式,放大缩小,确立不等式,找到的循环的范围 
        d = (2*a-i*i+i)  
        e = (i*2)  
        if not d%e and d>0:   #  如何判断除法之后的数还是整数,?3.0  
            x+= 1  
    c.append(x)  
for i,ii in enumerate(c):  
    print("Case #%d:"%(i+1),ii) 
3.他人的想法

如出一辙

4.综合感悟

程序题涉及到基本的数学知识,我们要善于联系,也要充分利用。把握编程实现的乐趣。

猜你喜欢

转载自blog.csdn.net/tommy1295/article/details/80722305
今日推荐