java - 通过连续自然数的加法或减法获得一个数

标签 java c++ c algorithm math

我正在尝试编写一个函数,使用它可以以最少的步骤获取任何自然数。允许我对从 1 开始的自然数进行加法或减法。 条件是:

  1. 一个数字只能使用一次

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

  3. 不允许转义任何数字

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

例如:如果我想要的数字是4,那么它的获取方式为-1+2+3,这里答案是3。以类似的方式,如果我想要 6,则 1+2+3 这里答案是 3。对于10= 1+2+3+4,则为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 + "__________"); 
}

最佳答案

好吧,就这样吧。考虑以下二叉树。现在您可以找到每条路径的总和,并使用 sum=您的数字(假设为 4) 获取每条路径。现在您可以从中获得最大值(value)。尝试想出这个的实现方案。如果你尝试一些事情,我可以进一步帮助你。

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

关于java - 通过连续自然数的加法或减法获得一个数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18308139/

相关文章:

c++ - Visual Studio 2013 C++ 概述/折叠 if/else/while 代码区域

c - 灵活的数组成员会导致未定义的行为吗?

java - 打印出带有字符的 ASCII 圆和轴

java - 使用嵌套对象执行 Collections.sort() 时如何处理空值?

c++ - 为什么内联模板特化有帮助,我应该这样做吗?

c++ - 如何使用 popen() 重定向 stderr 并在后台运行?

java - 从 52964 字节处停止的套接字读取所有字节

c - 将 fopen 与 temp 系统变量一起使用

java - 在 while 循环中更改 double 的值

java - 无法从 ListView 项目中检索 Intent 的地址和电话号码