题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序

def FindContinuousSequence(self, tsum):
        max_len = int(pow(2*tsum,0.5)) # 假设从1开始加,最多可能的序列长度
        res = []
        for i in range(2, max_len+1): # i个数字之和 = tsum
            mean = float(tsum) / i
            # 两种情况:
            # 1. i为偶数,则mean应为x.5,即减去0.5后为整数
            # 2. i为奇数,则mean应为整数
            if (i%2 == 0 and (mean-0.5) % 1 == 0) or (i%2 == 1 and mean % 1 == 0):
                start = int(mean - (i // 2)) + (i + 1) % 2 
                end = int(mean + (i // 2))
                res=[range(start, end+1)]+res # 序列越短,数字越大,向前拼接数组
        return res