概述
一,问题
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
二,分析
给定的输入是一个连续的正数序列
这就意味着最小的连续序列是两个数字构成
比如3,4.比如6,7
而连续的两个数字的和,不超过大数的两倍
比如3+4<4x2=8
6+7<2x7=14
n+(n-1)<2n
举个栗子:我们想找和为15的序列
先从1找起:1+2+3+4+5=15,输出1,2,3,4,5
继续看有没有:4+5+6=15,输出4,5,6
思路是这样的,首先从1开始一个一个加过去,直到和等于我们要找的数或者大于我们要找的数(从1开始一路加过去,一直加到5时得到15)
(如果要找14,1+2+3+4=10 1+2+3+4+5=15>14)
先说等于的情况,也就是从1开始一路加过去,一直加到5时得到15之后,我们还需要知道有没有其他数列还能加成15.
继续往后加,加到6,此时我们知道,从1加到6的和比15多了个6,于是我们从1开始减,就是15+6-1-2-3,此时,又变回了15,而数列剩下了4,5,6
还有没有呢?继续往后加一位,4+5+6+7,多了个7,再从4开始减,减4减5后等于13.
还有没有呢?继续往后走一位。6+7+8,多了8,从6开始减,减6后我们发现,7+8=15,输出7,8
此时,big还能不能往后再走呢?再往后到9,而9+8=17>15。也就是说从8以后的数,就再也没有能连续两项相加 ,小于或者等于15的数列了,也就更不会有连续大于两项的所求数列了
三,代码
最后
以上就是天真飞鸟为你收集整理的和为s的连续正数序列(python)的全部内容,希望文章能够帮你解决和为s的连续正数序列(python)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复