输出所有和为S的连续正数序列,例如:连续正数和为100的序列:18,19,20,21,22。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
import java. util. ArrayList;
public class Test41 {
public ArrayList< ArrayList< Integer> > FindContinuousSequence ( int sum) {
ArrayList< ArrayList< Integer> > list = new ArrayList < ArrayList< Integer> > ( ) ;
if ( sum < 3 ) {
return list;
}
int start = 1 ;
int end = 2 ;
int mid = ( sum + 1 ) >> 1 ;
while ( start < mid) {
int s = sumAll ( start, end) ;
if ( s == sum) {
list. add ( sequence ( start, end) ) ;
start++ ;
} else if ( s < sum) {
end++ ;
} else {
start++ ;
}
}
return list;
}
public int sumAll ( int start, int end) {
int sum = 0 ;
for ( int i = start; i <= end; i++ ) {
sum += i;
}
return sum;
}
public ArrayList< Integer> sequence ( int start, int end) {
ArrayList< Integer> list = new ArrayList < > ( ) ;
for ( int i = start; i <= end; i++ ) {
list. add ( i) ;
}
return list;
}
}