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); } }
时间: 2024-12-17 09:11:29