`
slmi
  • 浏览: 32418 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

自然数写为连续正整数之和

阅读更多
引用
自然数写为连续正整数之和
                                    
                                   
一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:
15=1+2+3+4+5
15=4+5+6
15=7+8
                                   
请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。
输入数据:一个正整数,以命令行参数的形式提供给程序。
                                   
输出数据:在标准输出上打印出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小正整数开始、以从小到大的顺序打印。如果结果有多个序列,按各序列的最小正整数的大小从小到大打印各序列。此外,序列不允许重复,序列内的整数用一个空格分隔。如果没有符合要求的序列,输出“NONE”。
                                   
例如,对于15,其输出结果是:
15=1+2+3+4+5
15=4+5+6
15=7+8
                                   
对于16,其输出结果是:
NONE
                                   
                                   
算法思想:
                                    
                                   
设x1+x2+...+xi=n, 条件: i>=2,x1<=n/2
其中:
        x2=x1+1
        x3=x1+2
        。。。
        xi=x1+i-1
                                             
        i*x1+i*(i-1)/2=n      =>     x1=(n-i*(i-1)/2 )/i=n/i-(i-1)/2

从运行结果得到一个结论:2的幂次方不能表示为连续正整数之和。
public static void conPlus(int value) {
		int count = value / 2;
		int[] result = new int[count];
		int sum = 0;
		int resultCount = 0;

		for (int i = 0; i < count; i++)
			result[i] = 0;
		for (int index = 2; index < count; index++) {
			result[0] = value / index - (index - 1) / 2;
			if (result[0] <= 0)
				break;
			sum += result[0];
			for (int j = 1; j < index; j++) {
				result[j] = result[j - 1] + 1;
				sum += result[j];
			}
			if (sum == value) {
				resultCount++;
				System.out.print(value + "=");
				for (int i = 0; i < index - 1; i++) {
					System.out.print(result[i] + "+");
				}
				System.out.println(result[index - 1]);
			}

			sum = 0;

		}
		if (resultCount == 0)
			System.out.println("NONE");
	}


i=10
10=1+2+3+4
i=11
11=5+6
i=12
12=3+4+5
i=13
13=6+7
i=14
14=2+3+4+5
i=15
15=7+8
15=4+5+6
15=1+2+3+4+5
i=16
NONE
i=17
17=8+9
i=18
18=5+6+7
18=3+4+5+6
i=19
19=9+10
i=20
20=2+3+4+5+6
i=21
21=10+11
21=6+7+8
21=1+2+3+4+5+6
i=22
22=4+5+6+7
i=23
23=11+12
i=24
24=7+8+9
i=25
25=12+13
25=3+4+5+6+7
i=26
26=5+6+7+8
i=27
27=13+14
27=8+9+10
27=2+3+4+5+6+7
i=28
28=1+2+3+4+5+6+7
i=29
29=14+15
i=30
30=9+10+11
30=6+7+8+9
30=4+5+6+7+8
i=31
31=15+16
i=32
NONE
i=33
33=16+17
33=10+11+12
33=3+4+5+6+7+8
i=34
34=7+8+9+10
i=35
35=17+18
35=5+6+7+8+9
35=2+3+4+5+6+7+8
i=36
36=11+12+13
36=1+2+3+4+5+6+7+8
i=37
37=18+19
i=38
38=8+9+10+11
i=39
39=19+20
39=12+13+14
39=4+5+6+7+8+9
i=40
40=6+7+8+9+10
i=41
41=20+21
i=42
42=13+14+15
42=9+10+11+12
42=3+4+5+6+7+8+9
i=43
43=21+22
i=44
44=2+3+4+5+6+7+8+9
i=45
45=22+23
45=14+15+16
45=7+8+9+10+11
45=5+6+7+8+9+10
45=1+2+3+4+5+6+7+8+9
i=46
46=10+11+12+13
i=47
47=23+24
i=48
48=15+16+17
i=49
49=24+25
49=4+5+6+7+8+9+10
i=50
50=11+12+13+14
50=8+9+10+11+12
i=51
51=25+26
51=16+17+18
51=6+7+8+9+10+11
i=52
52=3+4+5+6+7+8+9+10
i=53
53=26+27
i=54
54=17+18+19
54=12+13+14+15
54=2+3+4+5+6+7+8+9+10
i=55
55=27+28
55=9+10+11+12+13
55=1+2+3+4+5+6+7+8+9+10
i=56
56=5+6+7+8+9+10+11
i=57
57=28+29
57=18+19+20
57=7+8+9+10+11+12
i=58
58=13+14+15+16
i=59
59=29+30
i=60
60=19+20+21
60=10+11+12+13+14
60=4+5+6+7+8+9+10+11
i=61
61=30+31
i=62
62=14+15+16+17
i=63
63=31+32
63=20+21+22
63=8+9+10+11+12+13
63=6+7+8+9+10+11+12
63=3+4+5+6+7+8+9+10+11
i=64
NONE
i=65
65=32+33
65=11+12+13+14+15
65=2+3+4+5+6+7+8+9+10+11
i=66
66=21+22+23
66=15+16+17+18
66=1+2+3+4+5+6+7+8+9+10+11
i=67
67=33+34
i=68
68=5+6+7+8+9+10+11+12
i=69
69=34+35
69=22+23+24
69=9+10+11+12+13+14
i=70
70=16+17+18+19
70=12+13+14+15+16
70=7+8+9+10+11+12+13
i=71
71=35+36
i=72
72=23+24+25
72=4+5+6+7+8+9+10+11+12
i=73
73=36+37
i=74
74=17+18+19+20
i=75
75=37+38
75=24+25+26
75=13+14+15+16+17
75=10+11+12+13+14+15
75=3+4+5+6+7+8+9+10+11+12
i=76
76=6+7+8+9+10+11+12+13
i=77
77=38+39
77=8+9+10+11+12+13+14
77=2+3+4+5+6+7+8+9+10+11+12
i=78
78=25+26+27
78=18+19+20+21
78=1+2+3+4+5+6+7+8+9+10+11+12
i=79
79=39+40
i=80
80=14+15+16+17+18
i=81
81=40+41
81=26+27+28
81=11+12+13+14+15+16
81=5+6+7+8+9+10+11+12+13
i=82
82=19+20+21+22
i=83
83=41+42
i=84
84=27+28+29
84=9+10+11+12+13+14+15
84=7+8+9+10+11+12+13+14
i=85
85=42+43
85=15+16+17+18+19
85=4+5+6+7+8+9+10+11+12+13
i=86
86=20+21+22+23
i=87
87=43+44
87=28+29+30
87=12+13+14+15+16+17
i=88
88=3+4+5+6+7+8+9+10+11+12+13
i=89
89=44+45
i=90
90=29+30+31
90=21+22+23+24
90=16+17+18+19+20
90=6+7+8+9+10+11+12+13+14
90=2+3+4+5+6+7+8+9+10+11+12+13
i=91
91=45+46
91=10+11+12+13+14+15+16
91=1+2+3+4+5+6+7+8+9+10+11+12+13
i=92
92=8+9+10+11+12+13+14+15
i=93
93=46+47
93=30+31+32
93=13+14+15+16+17+18
i=94
94=22+23+24+25
i=95
95=47+48
95=17+18+19+20+21
95=5+6+7+8+9+10+11+12+13+14
i=96
96=31+32+33
i=97
97=48+49
i=98
98=23+24+25+26
98=11+12+13+14+15+16+17
i=99
99=49+50
99=32+33+34
99=14+15+16+17+18+19
99=7+8+9+10+11+12+13+14+15
99=4+5+6+7+8+9+10+11+12+13+14



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics