题目描述:一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:
15=1+2+3+4+5
15=4+5+615=7+8
请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。
输入数据:一个正整数,以命令行参数的形式提供给程序。
输出数据:在标准输出上打印出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小正整数开始、以从小到大的顺序打印。如果结果有多个序列,按各序列的最小正整数的大小从小到大打印各序列。此外,序列不允许重复,序列内的整数用一个空格分隔。如果没有符合要求的序列,输出“NONE”。
例如,对于15,其输出结果是:
1 2 3 4 5
4 5 6
7 8
对于16,其输出结果是:
NONE
程序为:
import java.io.*;
import java.math.*;
public class DS1031A
{
public static void print(int i,int j)
{
for(int m=0;m<j;m++)
{
System.out.print(i+m+" ");
}
System.out.println(".");
}
public static void parseNum(int num)
{
int count = 0;
int temp = num/2+1;
int number = (int)Math.sqrt((double)(num+1)*2);
for(int i=number;i>=2;i--)
{
for(int j=1;j<=temp+1;j++)
{
int result = i*j;
if(result>num)
{
break;
}
for(int m=0;m<i;m++)
{
result = result+m;
}
if(result==num)
{
print(j,i);
count++;
break;
}
else if(result<num)
{
continue;
}
else
{
break;
}
}
}
if(count==0)
{
System.out.println("NONE");
}
}
public static void main(String args[])
{
String number = "";
try
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter the number you wanted:");
number = reader.readLine();
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
}
int num =0;
try
{
num = Integer.parseInt(number);
}
catch(Exception e)
{
System.out.println("您输入的不是数字");
return;
}
System.out.println("Result:");
parseNum(num);
}
}
结果为:
Enter the number you wanted:
45
Result:
1 2 3 4 5 6 7 8 9 .
5 6 7 8 9 10 .
7 8 9 10 11 .
14 15 16 .
22 23 .