数学"非循环"方程

时间:2014-11-14 08:18:06

标签: java math equation numbered

我正在创建一个 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:

enter image description here

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),我将输入许多代表编号纸张的数字  

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

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

3 个答案:

答案 0 :(得分:2)

您不需要任何循环。 n堆中的论文数量为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

答案 1 :(得分:0)

你需要某种循环才能做到这一点。我可以帮助数学,但其他人可能需要帮助编程

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

该方法应该有效。但假设这样的循环即使长数也不会占用太大的力量。

答案 2 :(得分:0)

Mathy回答,但它可能足以帮助你:

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

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

是否可以在不使用循环的情况下计算,我不能说,我不知道任何可以帮助你的库(虽然我不是数学Java库的专家)。之后,您正在寻找的答案是

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