首页 > 代码库 > 刷题_CSDN_正整数的连续的加数序列

刷题_CSDN_正整数的连续的加数序列

import java.util.Scanner;

/**
 * 题目描述:一个正整数可以表示为n(n>2)个连续正整数之和
 * eg: 15 = 1+2+3+4+5; 15 = 4+5+6; 15 = 7+8
 * 根据输入的任意一个正整数,找出 符合这种要求的所有正整数序列
 * 输入数据: 一个正整数
 * 输出数据: 在标准输出上打印出符合题目描述的全部正整数序列,
 * 每行一个序列,每个序列都从该序列的最小正整数开始、以从小到大的顺序打印。
 * 如果结果有多个序列,按各序列的最小正整数的大小从小到大打印各序列。
 * 此外,序列不允许重复,序列内的整数用一个空格分隔。
 * 如果没有符合要求的序列,输出“NONE”
 * 解题思路:采用最简单粗暴的穷举法思想O(n*n),一个正整数i可以表示为n(n>2)个连续正整数之和,
 * 那其中最大整数max不超过i/2+1的大小,所以从1开始,往上求和。找到相等的就打印序列
 * @author Administrator
 *
 */
public class Test {
    public static void print(int n) {
        int max = 1 + n/2;
        boolean flag = false;
        for(int i = 1; i < max; i++) {
            int cur = i;
            for(int j = i + 1; j <= max; j++) {
                if(cur < n) {
                    cur += j;
                }
                if(cur == n) {
                    flag = true;
                    for(int p = i; p <= j; p++) {
                        System.out.print(p + " ");
                    }
                    System.out.println();
                    break;
                } else if(cur > n) break;
            }        
        }
        if(flag == false) System.out.println("NONE");
    }
    
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("请输入一个正整数");
        int n = in.nextInt();
        print(n);
    }
}

 

刷题_CSDN_正整数的连续的加数序列