本人属于Java初学者,学习Java有一段时间了。为了提高自己编程能力,最近在网上找了一些程序设计大赛的题目来做。
每做出一道,就会把自己的答案贴到博客上来,争取每天一道:
一来丰富一下自己的第一个技术博客
二来以此锻炼一下自己的耐力
最重要的是恳请各位大牛给小弟提出批评意见,让我提高得更快一点,在此,先拜谢大家了!
好了,上菜!
/**
*Apr 1, 2013
*Copyright(c)JackWang
*All rights reserve
*@Author <a href="mailto:wangchengjack@163.com">JackWang</a>
*/
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;
}
}
}
}
}
题目和我的分析在注释里,请各位大牛批改吧!