和为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 }
posted on 2017-06-06 16:04 一个不会coding的girl 阅读(150) 评论(0) 编辑 收藏 举报