和为S的连续正数序列

题目

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

分析

  设置两个变量low(初始时为1)和high(初始时为2),利用求和公式,low到high的和S=(low+high)*(high-low+1)/2。

  当S<sum时,high++;当S>sum时,low++;当S==sum时,将low到high存到list中,且low++。

  注意,这里的循环条件为low<=sum/2。

代码

 1   public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
 2         ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
 3         int low = 1, high = 2;
 4         while(low<=sum/2){
 5             int temp = (low+high)*(high-low+1)/2;
 6             if(temp<sum)
 7                 high++;
 8             else if(temp>sum)
 9                 low++;
10             else{
11                 ArrayList<Integer> l = new ArrayList<Integer>();
12                 for(int i=low;i<=high;i++){
13                     l.add(i);
14                 }
15                 list.add(l);
16                 low++;
17             }
18         }
19         return list;
20     }
原文地址:https://www.cnblogs.com/jiqianqian/p/6952077.html