您的位置:首页 > 编程语言 > Java开发

百度之星 2005年 初赛题目一 java 版本

2012-05-22 18:45 295 查看
题目描述:一个正整数有可能可以被表示为 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

/**

* @author wjl

*

*/

public class SpiteNumber {

private static boolean isHasResult = false;

private static Vector<Integer> quotient = new Vector<Integer>();

public static void main(String[] args) {

int number = 16;

if (isPrimeNum(number)) {

int i = number / 2;

System.out.println(i + " " + (i + 1));

return;

}

if (number % 2 != 0) {

System.out.println(number / 2 + " " + (number / 2 + 1));

}

quotient = getQuotient(number);

for (int quot : quotient) {

if (quot % 2 == 0) {

continue;

}

int mid = number / quot;

int min = mid - quot / 2;

if (min < 0) {

continue;

}

// 打印结果

for (int i = quot, j = 0; i >= 1; i--, j++) {

isHasResult = true;

System.out.print(min + j + " ");

}

System.out.print("\n");

}

if (!isHasResult) {

System.out.println("NONE");

}

}

public static boolean isPrimeNum(int num) {

for (int i = 2; i <= Math.sqrt(num); i++) {

if (num % i == 0) {

return false;

}

}

return true;

}

public static Vector<Integer> getQuotient(int num) {

Vector<Integer> mVector = new Vector<Integer>();

for (int i = 2; i <= num / 2; i++) {

if (num % i == 0) {

mVector.add(i);

}

}

return mVector;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: