【问题标题】:Math "non loop" equation [closed]数学“非循环”方程[关闭]
【发布时间】:2015-01-11 14:08:40
【问题描述】:

我正在创建一个 Java 程序,但我正在处理一个数学问题,但似乎无法解决它。这是我的任务:

I have infinite numbers of numbered papers(1,2,3, ..). 
This papers are stacked into stacks using 2 variables a and b.

If a = 5 and b = 3 the stacks look like:

So the first stack has "a" items (5) and each next has "b" more (3) as previous.

现在我必须找出一个方程式,它会告诉我我需要删除多少篇论文才能找到特定的一篇

例如,如果我想获得编号为 20 的论文,我需要删除 4 篇论文才能到达。这就是我正在寻找的解决方案,当我输入一些特定的论文时,我只需要知道我需要移动多少(在它所在的堆栈中)才能到达它。当我有了这个我把所有的论文放回去并搜索下一个。

由于我将使用它制作一个程序,该程序将处理长数字(最多 16 位数字),因此最好的解决方案是找到一些“非循环”方程。例如,如果我将设置 a = 34354 和 b = 56774,并且我想知道要删除多少篇论文才能获得编号为 533663634611112 的论文。

我的输入将是:
- 数字 a 和 b
- 我想达到的论文数量 (c)
- 关于上述变量(c),我将输入这么多代表编号论文的数字

输出
- 我必须移动的论文数才能找到我插入的所有论文

所有数字都会很长,所以最好制作一个非循环程序。 感谢您提供有关此问题的所有帮助。

【问题讨论】:

  • 和编程有关吗?为什么会有很多s-h-i-t-s
  • 添加编程语言标签并将您的代码包含在问题中。现在这个问题还不够清楚。
  • 实际上我只是在寻找那部分代码,它将返回需要移动以到达特定纸张的纸张数量。我想自己制作所有其他东西,而不是寻找整个程序。
  • 所以 a 是初始堆栈大小,而 b 是堆栈大小的增量。你确定你可以在没有循环的情况下解决这个问题吗?除非您以某种方式编写递归公式来确定索引,否则请使用线性递归公式使其成为封闭公式。我刚才在想一个递归公式,但我有点卡住了,我在工作,所以我的时间有限,对不起。
  • 是的,这就是我正在尝试的,实际上我需要索引纸张所在堆栈的顶部纸张编号。因为我要搜索的纸张数量最多为 5数字编号,并且纸张编号最多可以是 16 位,认为循环需要很长时间。对所有搜索过的论文都有它是的,但没有一个嵌套的用于搜索锄头的许多论文要为每个移动。

标签: java math equation numbered


【解决方案1】:

您不需要任何循环。 nth 堆中的论文数量为a + (n-1)b。所以第一个n堆中的论文数量是(算术系列)(b/2)n^2 + (a - b/2)n

使用它,找出获得论文所需的堆数。在您的示例中,将其设置为 20(并使用 3 和 5)。所以你有20 = 1.5n^2 + 3.5nSolving this(使用二次公式)给出n = -5n = 8/3。忽略负面的,因为它在这种情况下没有意义。

如果你需要 8/3 堆才能到达你的论文,它必须在第 3 堆(向上舍入到最接近的 int(上限函数))。使用上面的公式和n = 3 可以找到前三堆(1.5 * 3^2 + 3.5 * 3 = 13.5 + 10.5 = 24)中有 24 篇论文。

24 - 20 = 4 = 您需要删除的纸张数量。

mockup solution, you need to remove hardcoding and make sure nothing overflows for the large numbers

【讨论】:

    【解决方案2】:

    数学答案,但可能足以帮助您:

    栈数是两个不等式的单整数解:

    ax + b(x-1)> argument AND a(x-1) + b(x-2) < argument
    

    是否可以在不使用循环的情况下计算,我不能说,我不知道有什么库可以帮助你(尽管我不是数学 Java 库方面的专家)。之后,您正在寻找的答案是

    a*x + b(x-1) - argument
    

    【讨论】:

      【解决方案3】:

      您需要某种循环来执行此操作。我可以帮助数学,但其他人可能需要帮助编程

      j=1
      TOTAL = ja + (j-1)b
      If the TOTAL is less than c, then let j=j+1 and loop
      If the TOTAL is greater than c, end the loop (this loop shouldn't take too long)
      Then calc TOTAL - c from it to get your answer
      

      该方法应该有效。但是假设这样的循环即使是长数字也不应该消耗太多能量。

      【讨论】:

      • 谢谢,但不太清楚你的意思。是的,为了搜索 c 论文,我将有一个从 1 到 c 的循环。但是在这个循环中,如何管理插入的论文编号并获得要移动多少的答案。您能否解释一下我给出的示例中的公式 a=5 且 b 为 3,我们正在寻找编号为 20 的论文。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      • 2019-06-24
      • 1970-01-01
      相关资源
      最近更新 更多