面试题57.2:和为s的连续正数序列
题目要求:
输入一个整数s,打印所有和为s的连续正数序列(至少两个)。例如,输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以打印出三个连续序列15,46,7~8。
解题思路:
与上一题类似,依旧使用两个指针small,big,值分别为1,2。如果从small加到big的和等于s,即找到了一组解,然后让big后移,继续求解。如果和小于s,big后移,如果和大于s,small前移。直到small大于s/2停止。
package chapter6;
/**
* Created with IntelliJ IDEA
* Author: ryder
* Date : 2017/8/17
* Time : 15:47
* Description:和为s的连续正数序列
**/
public class P282_ContinuousSequenceWithSum {
public static void findContinuousSequence(int sum){
if(sum<3)
return;
int small = 1,big = 2,middle = sum>>1;
int curSum = small+big;
while (small<=middle){
if(curSum==sum){
printContinousSequence(small,big);
big++;
curSum+=big;
}
else if(curSum<sum){
big++;
curSum+=big;
}
else{
curSum-=small;
small++;
}
}
}
public static void printContinousSequence(int small,int big){
for(int i=small;i<=big;i++){
System.out.print(i);
System.out.print(" ");
}
System.out.println();
}
public static void main(String[] args){
findContinuousSequence(15);
}
}
运行结果
1 2 3 4 5
4 5 6
7 8