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

[quote]自然数写为连续正整数之和


一个正整数有可能可以被表示为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[/quote]
[color=red][size=large]从运行结果得到一个结论:2的幂次方不能表示为连续正整数之和。[/size][/color]

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");
}


[table]
|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|
|[color=red]NONE[/color]|
|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|
|[color=red]NONE[/color]|
|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|
|[color=red]NONE[/color]|
|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|
[/table]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值