package com.stanley.algorithm;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class TestAlgorithm1 {
/**
* 题目描述:一个正整数有可能可以被表示为 n(n>=2) 个连续正整数之和,如: 15=1+2+3+4+5 15=4+5+6 15=7+8
* 请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。 输入数据:一个正整数,以命令行参数的形式提供给程序。
* 输出数据:在标准输出上打印出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小正整数开
*
* 始、以从小到大的顺序打印。如果结果有多个序列,按各序列的最小正整数的大小从小到大打印各序列。此外,序列不
*
* 允许重复,序列内的整数用一个空格分隔。如果没有符合要求的序列,输出 “NONE” 。
* 例如,对于 15 ,其输出结果是:
* 1 2 3 4 5
* 4 5 6
* 7 8
* 对于 16 ,其输出结果是: NONE
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
caculate(i);
}
private static void caculate(int i) {
int sum = 0; //和
int j = 1; //初始化n
int flag = 0; //是否能表示成连续正整数和的标识 :0表示不能表示成为连续整数和,非0可以
while (j < (i+1)/2) {
for (int n = j; n <= i; n++) {
sum += n;
if (i == sum) {
flag++;
for (int k = j; k <= n; k++) {
System.out.print(k + " ");
}
System.out.println();
break; //后面的值没必要计算
}
}
sum = 0; //和重新置0
j++; //n初始值+1
}
if (0 == flag) {
System.out.println("NONE");
}
}
}