题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出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