题目描述:
一个正整数有可能可以被表示为n(n>1)个连续正整数之和,如:
15=1+2+3+4+5
15=4+5+6
15=7+8
请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。
1.在标准输出上打印出符合题目描述的全部正整数序列,每个序列都从改序列的最小正整数开始,以从小到大的顺序打印
2.如果结果有多个序列,按各序列的最小正整数的大小从小到大打印个序列
3.序列不允许重复,序列内的整数用一个空格分隔,序列之间用英文“,”分隔
4.如果没有符合要求的序列,输出“NONE”
样例输入:15
样例输出:1 2 3 4 5,4 5 6,7 8
思路:
本题并不难,个人感觉难点反而是在输出格式上
- 对输出入1 2 3 4 5 注意5后面是没有空格的;
- 在多个输出样例中,将逗号,放在第二个输出样例中输出,避免了
import java.util.Scanner;
public class Main_Continuous_Integer_Sum {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int num = sc.nextInt();
boolean flag=false;//是否存在整数能被划分为N个连续的数相加
boolean firstOut = true;//是否是第一个完整输出
for(int i=1; i<=(int)((num+1)/2); i++){
int sum = i;
for(int j=i+1; j<=(int)((num+1)/2); j++){
sum += j;
if(sum > num){
break;
}
else if(sum == num){
flag = true;//整数可以被划分
//并不是第一个输出,则需要加上,
if(!firstOut){
System.out.print(",");
}
for(int k=i; k<=j; k++){
if(k!=j){
System.out.print(k +" ");
}else{//最后一个输出不用加空格
System.out.print(k);
}
}
firstOut = false;
}
}
}
if(!flag){
System.out.println("NONE");
}
}
}
}
测试用例:
15
1 2 3 4 5,4 5 6,7 8
10
1 2 3 4
16
NONE