和为s的连续正数序列

和为S的连续正数序列

http://www.nowcoder.com/questionTerminal/c451a3fd84b64cb19485dad758a55ebe

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

相关推荐

我看到好多人都在说0offer好焦虑,结果一看是投了百度快手字节啥的。好像大家都是只想通过校招进大厂,对小公司是不考虑的吗😂可是能进大厂的难道不是只有少部分人吗,真心发问
梦想是成为七海千秋:沉默的大多数吧,喜欢晒的都是能引起共鸣的大厂,找小厂的人,别人也不认识你这个小厂,就自己偷偷找了实际上大多数人哪有什么机会能找到大厂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务