0

我正在创建一个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),我将输入这么多代表编号论文的数字

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

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

4

3 回答 3

2

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

使用它,找到获得论文所需的堆数。在您的示例中,将其设置为 20(并使用 3 和 5)。所以你有20 = 1.5n^2 + 3.5n. 解决这个问题(使用二次公式)给出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 = 您需要移除的纸张数量。

模型解决方案,您需要删除硬编码并确保没有任何溢出

于 2014-11-14T09:43:01.197 回答
0

Mathy 的回答,但这可能足以帮助您:

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

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

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

a*x + b(x-1) - argument
于 2014-11-14T09:37:15.880 回答
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

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

于 2014-11-14T09:04:25.630 回答