“百度之星”程序设计大赛试题解答(Java实现)

本人属于Java初学者,学习Java有一段时间了。为了提高自己编程能力,最近在网上找了一些程序设计大赛的题目来做。

每做出一道,就会把自己的答案贴到博客上来,争取每天一道:

一来丰富一下自己的第一个技术博客

二来以此锻炼一下自己的耐力

最重要的是恳请各位大牛给小弟提出批评意见,让我提高得更快一点,在此,先拜谢大家了!

好了,上菜!


/**
 *Apr 1, 2013
 *Copyright(c)JackWang
 *All rights reserve
 *@Author JackWang
 */
package com.example.baidupro;

/**
 * 需求: 题目描述:一个正整数有可能可以被表示为 n(n>=2) 个连续正整数之和, 如: 15=1+2+3+4+5 15=4+5+6 15=7+8
 * 请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。 输入数据:一个正整数,以命令行参数的形式提供给程序。
 * 输出数据:在标准输出上打印出符合题目描述的全部正整数序列,每行一个序列,每 个 序列都从该序列的最小正整数开始、以从小到大的顺序打印。如果结果有多个序列
 * 按各序列的最小正整数的大小从小到大打印各序列。此外,序列不允许重复,序列内 的整数用一个空格分隔。如果没有符合要求的序列,输出 “NONE” 。
 * 例如,对于 15 ,其输出结果是: 1 2 3 4 5 4 5 6 7 8 对于 16 , 其输出结果是: NONE 思路:
 * 1,所有的正偶数不能满足此规律(因为连续的数相加满足(0除外,正整数):连续n个数相加必为奇数,无论n为奇偶
 *    所有正奇数都满足
 * 2,任意一个奇数n:从k开始累加(k=1开始),如果有sum = n 则找到一个,k++,否则 直接k++ 当k=(n+1)/2时 , 停止,输出None
 * 3,循环的嵌套
 * 
 * @author WangCheng
 * 
 */

public class IntegerList {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int n = 17;
		getAllInteList(n);

	}

	public static void getAllInteList(int n) {
		if (0 == n % 2) {   //所有偶数不满足
			System.out.println("NONE");
			return;
		}
		for (int k = 1; k <= (n + 1) / 2; k++) {
			StringBuilder sb = new StringBuilder(); // ,每轮循环开始时,建立一个sb;
			int sum = 0;
			for (int i = k; i <= (n + 1) / 2; i++) {
				sb.append(i + " ");
				sum += i;
				if (sum == n) {
					System.out.println(sb.deleteCharAt(sb.length() - 1)
							.toString());// 去掉最后一个多加的空格
				}
				if (sum > n) { // 如果sum>n 提前停止该循环,进入下一轮
					break;
				}
			}
		}

	}

}

题目和我的分析在注释里,请各位大牛批改吧!

你可能感兴趣的:(Java)