将正整数拆分成连续正整数之和

题目描述:

一个正整数有可能可以被表示为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. 对输出入1 2 3 4 5  注意5后面是没有空格的;
  2. 在多个输出样例中,将逗号,放在第二个输出样例中输出,避免了
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

 


 

你可能感兴趣的:(笔试题)