输出所有和为n连续正数序列
2013-06-27 14:05
288 查看
例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。
(x+y)(y-x+1) = 2n
y*y +y = 2n + x*x -x = v
y*y < v
(x+y)(y-x+1) = 2n
y*y +y = 2n + x*x -x = v
y*y < v
public class CNumbers { public ArrayList<Range> getRange(int n){ assert(n > 0); ArrayList<Range> list = new ArrayList<Range>(); for(int i=1; i<=n/2; i++){ int v = 2*n + i*i -i; for(int j=i; j*j<v; j++){ if(j*(j+1) == v){ list.add(new Range(i,j)); break; } } } return list; } public class Range{ public int x; public int y; public Range(int x, int y){ this.x = x; this.y = y; } } /** * @param args */ public static void main(String[] args) { CNumbers cn = new CNumbers(); ArrayList<Range> list = cn.getRange(15); for(Range r : list){ for(int i=r.x; i<=r.y; i++){ System.out.print(i + " " ); } System.out.println(); } } }
相关文章推荐
- 写正确程序需要注意的地方:输入一个正数n,输出所有和为n连续正数序列。
- 30.输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
- 输入一个正数 n,输出所有和为 n 连续正数序列。 java实现
- 一道算法面试题 -- 输出所有和为n连续正数序列
- 【算法学习-01】 输入一个正数 n,输出所有和为 n 连续正数序列。
- 算法习题51:输入一个正数n,输出所有和为n连续正数序列
- 输入一个正数n,输出所有和为n连续正数序列。
- 输入一个正数 n,输出所有和为 n 连续正数序列。
- 输入一个正数n,输出所有和为n连续正整数序列
- 输入一个正数 n,输出所有和为n 连续正数序列。
- 【每日面试题】输入一个正数n,输出所有和为n连续正数序列
- 输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
- 输出所有和为S的连续正数序列
- 输入一个正数 n,输出所有和为 n 的连续正数序列 [No. 25]
- 输入一个正数n,输出所有和为n 连续正数序列
- 输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。
- 输入一个正数n,输出所有和为n的连续正数序列
- C++输出所有和为S的连续正数序列(牛客剑指offer)
- 输入一个正数n,输出所有和为n连续正数序列。
- 输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。