求一个正整数是由哪几个连数(连续的正整数)相加
題目描述:隨便給出一個正整數, 求出這個數是由哪幾個正整數相加,要求相加的這幾個數是連續的。
如: 7+8=15,4+5+6=15,1+2+3+4+5=15
?
?
Test.java:
?
package com.joe;
?
public class Test
{
?public static void main(String[] args)
?{
??int v = 2;
??do {
???v++;
???Test.F(v, 1);
??} while (v <= 100);
?}
?
?//給出正整數v, 求出它是哪幾個連數相加的結果(連數:如2,3,4或4,5)
?public static void F(int value, int base)
?{
??Node node = new Node();
??int halfValue = value / 2;
??boolean flag = false;
??if(base <= halfValue)
??{
???int sum = 0;
???int i = base;
???while(true)
???{
????sum += i;
????if(sum == value)???//找到一個這樣的組合
????{
?????node.start = base;
?????node.end = i;
?????node.Display(value);
?????flag = true;???//針對當前的value,找到至少一個這樣的組合
????}
????if(sum >= value)???//尋找下一個組合
????{
?????sum = 0;
?????base++;?????//修改開始位置
?????if(base <= halfValue)
??????i = base;
?????else?????//已經不可能再有組合了
??????break;
????}
????else
?????i++;
???}
???if(flag)
????System.out.println();
??}
?}
}
Node.java:
package com.joe;
public class Node
{
?public int start;
?public int end;
?
?public void Display(int v)
?{
??System.out.print(v + " = ");
??for(int i = start; i <= end; i++)
??{
???if(i - start > 0)
????System.out.print(" + ");
???System.out.print(i);
??}
??System.out.println();
?}
}
運行結果很清楚了!
?
下面僅修改了一下Test.java中的F(),用遞歸來實現。實際上并沒有很強的遞歸思想,只是形式上是遞歸的,比較好看,代碼如下:
//給出正整數v, 求出它是哪幾個連數相加的結果(連數:如2,3,4或4,5)
?public static void F(int value, int base)
?{
??Node node = new Node();
??int halfValue = value / 2;
??
??if(base <= halfValue)
??{
???int sum = 0;
???int halfCeil = (int) Math.ceil(value * 0.5);
???for(int i = base; i <= halfCeil ; i++)
???{
????sum += i;
????if(sum == value)???//找到一個這樣的組合
????{
?????node.start = base;
?????node.end = i;
?????node.Display(value);
????}
????if(sum >= value)???//本輪查找結束,跳出循環
????{
?????F(value, base + 1);??//開始尋找下一個組合
?????break;
????}
???}
??}
?}
總結
以上是生活随笔為你收集整理的求一个正整数是由哪几个连数(连续的正整数)相加的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TPshop表结构
- 下一篇: 酷Q插件dll 加载失败!错误:缺失Ap