通过加或减连续的自然数来获得数

时间:2013-08-19 07:04:27

标签: java c++ c algorithm math

我正在尝试编写一个函数,使用该函数我可以在最小步骤中获得任何自然数。允许我从1开始添加或减去自然数。 那里的条件是:

  1. 仅使用一次号码

  2. 您只能执行加法和减法。

  3. 您不得转义任何数字

  4. 找到具有最大值的整数的值以获得该数字。

  5. 例如:如果我想要的数字是4,则获得-1 + 2 + 3 这里答案是3 。以类似的方式,如果我想要6然后1 + 2 + 3 这里答案是3 10 = 1 + 2 + 3 + 4 ans 4
    到目前为止我所拥有的:

    到目前为止我所拥有的:

    public void step() { 
        int n = (int)Math.sqrt(position * 2); 
        k = (position - (((n + 1) * n) / 2)); 
        l = ((((n + 1) * (n + 2)) / 2) - position); 
        System.out.println(k + " " + l); 
        System.out.println(n); 
        p = (l > k ? k : l); 
        r = (l > k ? n : n + 1); 
        System.out.println(p + " " + r); 
        if (k == 0) { 
            result = n; 
        } else { 
            result = r + (2 * p); 
        } System.out.println("__________" + result + "__________"); 
    }
    

2 个答案:

答案 0 :(得分:2)

好的,让我们这样做吧。请考虑关注binary tree。现在,您可以从每个路径中找到总和,并使用sum=your number(let's say 4)获取每个路径。现在你可以从中获得最大价值。试着想出这个的实现。我可以帮你进一步,如果你尝试一些东西。

      0
     /  \
    -1   1
   /  \  / \
  -2  2 -2  2

答案 1 :(得分:0)

解决方案是:

for n=1: = 1
for n=2: = 1+2 => 1+2+3 => 1-2+3 
for n=3: = 1+2
for n=4: = 1+2+3 => -1+2+3
for n=5: = 1+2+3 => 1+2+3+4-5
for n=6: = 1+2+3
for n=7: = 1+2+3+4=>1+2+3+4+5=>1+2+3-4+5
for any n, first calculate the S(k)=1+2+3+...+k

其中S(k)> n且x = S(k)-n是偶数。然后将x / 2的+翻转到 - 。

S(k) = (1+k)*k/2 > n
=> k*k + k -2n > 0
=> k > (-1 + sqrt(1+8n))/2
例如,n = 7,k> 3.2,然后k = 4,S(4)= 10,10-7 = 3,它是奇数,所以k = 5,S(5)= 15,x = 15-7 = 8,8 / 2 = 4,翻转4的符号,我们得到1 + 2 + 3-4 + 5 = 7

在某些情况下,Sk-n是奇数,但S(k + 1)-n也是奇数,在这种情况下,我们需要使用S(k + 2)。 代码如下:

public void step() {
        k = (int)Math.ceil(((-1 + Math.sqrt(1 + 8 * n)) / 2));
        int Sk = (1 + k) * k / 2;
        if ((Sk - n) % 2 != 0) {
            k++;
            Sk = (1 + k) * k / 2;
            if ((Sk - n) % 2 != 0) {
                k++;
                Sk = (1 + k) * k / 2;
            }
        }
        int i = (Sk - n) / 2;
        System.out.println("maximum number is : " + k + "the number with -ve sign is : " + i);
    }